Compare commits

..

No commits in common. "master" and "0.9.1" have entirely different histories.

51 changed files with 245 additions and 1266 deletions

View File

@ -37,7 +37,15 @@
<Label>Nom de naissance :</Label>
<TextBox Name="nomNaissanceTextBox" Text="{Binding Path=NomNaissance}" HorizontalAlignment="Left" VerticalContentAlignment="Center" Height="23" Width="150"/>
<Label>Prénom :</Label>
<TextBox Name="prenomTextBox" Text="{Binding Path=Prenom}" HorizontalAlignment="Left" VerticalContentAlignment="Center" Height="23" Width="150"/>
<TextBox Name="prenomTextBox" ToolTip="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}" Validation.Error="ValidationError" Binding.TargetUpdated="BindingTargetUpdated" Binding.SourceUpdated="BindingSourceUpdated" HorizontalAlignment="Left" VerticalContentAlignment="Center" Height="23" Width="150">
<TextBox.Text>
<Binding Path="Prenom" NotifyOnSourceUpdated="True" NotifyOnTargetUpdated="true" NotifyOnValidationError="true">
<Binding.ValidationRules>
<Validation:MandatoryString/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
<Label>Age :</Label>
<TextBox Name="ageTextBox" ToolTip="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}" Validation.Error="ValidationError" Binding.TargetUpdated="BindingTargetUpdated" Binding.SourceUpdated="BindingSourceUpdated" HorizontalAlignment="Left" VerticalContentAlignment="Center" Height="23" Width="30">
<TextBox.Text>
@ -61,11 +69,17 @@
<GroupBox Header="Adresse Locale" Margin="10,10,0,0" VerticalAlignment="Top">
<StackPanel>
<Label>Numéro et rue :</Label>
<TextBox Name="adresseTextBox" Text="{Binding Path=Adresse}" HorizontalAlignment="Left" VerticalContentAlignment="Center" Height="23" Width="150"/>
<TextBox Name="adresseTextBox" ToolTip="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}" Validation.Error="ValidationError" Binding.TargetUpdated="BindingTargetUpdated" Binding.SourceUpdated="BindingSourceUpdated" HorizontalAlignment="Left" VerticalContentAlignment="Center" Height="23" Width="150">
<TextBox.Text>
<Binding Path="Adresse" NotifyOnSourceUpdated="True" NotifyOnTargetUpdated="true" NotifyOnValidationError="true">
<Binding.ValidationRules>
<Validation:MandatoryString/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
<Label>Bâtiment :</Label>
<TextBox Name="adresseBatimentTextBox" Text="{Binding Path=AdresseBatiment}" HorizontalAlignment="Left" VerticalContentAlignment="Center" Height="23" Width="150"/>
<Label>Numéro d'appartement:</Label>
<TextBox Name="adresseNumeroBatimentTextBox" Text="{Binding Path=AdresseNumeroBatiment}" HorizontalAlignment="Left" VerticalContentAlignment="Center" Height="23" Width="150"/>
<Label>Quartier :</Label>
<TextBox Name="quartierTextBox" Text="{Binding Path=Quartier}" HorizontalAlignment="Left" VerticalContentAlignment="Center" Height="23" Width="150"/>
</StackPanel>

View File

@ -49,7 +49,10 @@ namespace Hermes {
public void Save_Click(object sender, RoutedEventArgs e) {
nomTextBox.GetBindingExpression(TextBox.TextProperty).UpdateSource();
nomNaissanceTextBox.GetBindingExpression(TextBox.TextProperty).UpdateSource();
prenomTextBox.GetBindingExpression(TextBox.TextProperty).UpdateSource();
ageTextBox.GetBindingExpression(TextBox.TextProperty).UpdateSource();
adresseTextBox.GetBindingExpression(TextBox.TextProperty).UpdateSource();
if(_isInvalidElements.Count == 0) {
ModelContext dbContext = ModelContext.Getinstance();
if(editRef == null) {

View File

@ -1,342 +0,0 @@
using Hermes.Model;
using System;
using System.Text;
using Microsoft.VisualBasic.FileIO;
using System.IO;
namespace Hermes {
class CitoyensSerializer {
public const string CIVILITE_FIELD = "Civilité";
public const string NOM_FIELD = "Nom";
public const string NOM_NAISSANCE_FIELD = "Nom de naissance";
public const string PRENOM_FIELD = "Prénom";
public const string DATE_NAISSANCE_FIELD = "Date de naissance";
public const string PROFESSION_FIELD = "Profession";
public const string TYPE_RESIDENCE_FIELD = "Résidence secondaire";
public const string MAIL_FIELD = "E-Mail";
public const string TEL_FIELD = "Téléphone";
public const string TEL_PORT_FIELD = "Mobile";
public const string QUARTIER_FIELD = "Quartier";
public const string ADRESSE_FIELD = "Adresse locale";
public const string ADRESSE_BATIMENT_FIELD = "Bâtiment";
public const string ADRESSE_NUMERO_BATIMENT_FIELD = "Numéro d'appartement";
public const string ADRESSE_EXT_FIELD = "Adresse";
public const string ADRESSE_EXT_CP_FIELD = "Code postal";
public const string ADRESSE_EXT_VILLE_FIELD = "Ville";
public const string DATE_CREATION_FIELD = "Date de création";
public const string DATE_MODIFICATION_FIELD = "Date de modification";
public const string TYPE_RESIDENCE_LABEL_FIELD = "Résidence";
public const string AGE_FIELD = "Age";
public const string ADRESSE_CP_FIELD = "Code postal local";
public const string ADRESSE_VILLE_FIELD = "Ville locale";
public const string ADRESSE_PRINCIPALE_FIELD = "Adresse principale";
public const string ADRESSE_PRINCIPALE_CP_FIELD = "Code postal principal";
public const string ADRESSE_PRINCIPALE_VILLE_FIELD = "Ville principale";
public const string ADRESSE_SECONDAIRE_FIELD = "Adresse secondaire";
public const string ADRESSE_SECONDAIRE_CP_FIELD = "Code postal secondaire";
public const string ADRESSE_SECONDAIRE_VILLE_FIELD = "Ville secondaire";
public const string UNKNOWN_FIELD = "unknown";
private string[] fields = null;
public CitoyensSerializer(string[] pField) {
fields = pField;
}
public CitoyensSerializer() {
fields = new string[] {
CIVILITE_FIELD,
NOM_FIELD,
NOM_NAISSANCE_FIELD,
PRENOM_FIELD,
DATE_NAISSANCE_FIELD,
PROFESSION_FIELD,
TYPE_RESIDENCE_FIELD,
MAIL_FIELD,
TEL_FIELD,
TEL_PORT_FIELD,
QUARTIER_FIELD,
ADRESSE_FIELD,
ADRESSE_BATIMENT_FIELD,
ADRESSE_NUMERO_BATIMENT_FIELD,
ADRESSE_EXT_FIELD,
ADRESSE_EXT_CP_FIELD,
ADRESSE_EXT_VILLE_FIELD,
DATE_CREATION_FIELD,
DATE_MODIFICATION_FIELD
};
}
public string GetCsvHeader() {
StringBuilder sb = new StringBuilder();
if(fields != null) {
for(int i = 0; i < fields.Length; i++) {
sb.Append($"\"{fields[i]}\"");
if(i < fields.Length - 1) {
sb.Append(";");
}
}
}
return sb.ToString();
}
public string Serialize(Citoyen citoyen) {
StringBuilder sb = new StringBuilder();
if(fields != null) {
for(int i = 0; i < fields.Length; i++) {
sb.Append("\"");
switch(fields[i]) {
case CIVILITE_FIELD:
sb.Append(citoyen.Civilite == null ? "" : citoyen.Civilite.Replace("\"", ""));
break;
case NOM_FIELD:
sb.Append(citoyen.Nom == null ? "" : citoyen.Nom.Replace("\"", ""));
break;
case NOM_NAISSANCE_FIELD:
sb.Append(citoyen.NomNaissance == null ? "" : citoyen.NomNaissance.Replace("\"", ""));
break;
case PRENOM_FIELD:
sb.Append(citoyen.Prenom == null ? "" : citoyen.Prenom.Replace("\"", ""));
break;
case DATE_NAISSANCE_FIELD:
sb.Append(citoyen.DateNaissance == null ? "" : (new DateTimeOffset(citoyen.DateNaissance.Value)).ToUnixTimeSeconds().ToString());
break;
case PROFESSION_FIELD:
sb.Append(citoyen.Profession == null ? "" : citoyen.Profession.Replace("\"", ""));
break;
case TYPE_RESIDENCE_FIELD:
sb.Append(citoyen.TypeResidence.ToString());
break;
case MAIL_FIELD:
sb.Append(citoyen.Mail == null ? "" : citoyen.Mail.Replace("\"", ""));
break;
case TEL_FIELD:
sb.Append(citoyen.Tel == null ? "" : citoyen.Tel.Replace("\"", ""));
break;
case TEL_PORT_FIELD:
sb.Append(citoyen.TelPort == null ? "" : citoyen.TelPort.Replace("\"", ""));
break;
case QUARTIER_FIELD:
sb.Append(citoyen.Quartier == null ? "" : citoyen.Quartier.Replace("\"", ""));
break;
case ADRESSE_FIELD:
sb.Append(citoyen.Adresse == null ? "" : citoyen.Adresse.Replace("\"", ""));
break;
case ADRESSE_BATIMENT_FIELD:
sb.Append(citoyen.AdresseBatiment == null ? "" : citoyen.AdresseBatiment.Replace("\"", ""));
break;
case ADRESSE_NUMERO_BATIMENT_FIELD:
sb.Append(citoyen.AdresseNumeroBatiment == null ? "" : citoyen.AdresseNumeroBatiment.Replace("\"", ""));
break;
case ADRESSE_EXT_FIELD:
sb.Append(citoyen.AdresseExt == null ? "" : citoyen.AdresseExt.Replace("\"", ""));
break;
case ADRESSE_EXT_CP_FIELD:
sb.Append(citoyen.AdresseExtCP == null ? "" : citoyen.AdresseExtCP.Replace("\"", ""));
break;
case ADRESSE_EXT_VILLE_FIELD:
sb.Append(citoyen.AdresseExtVille == null ? "" : citoyen.AdresseExtVille.Replace("\"", ""));
break;
case DATE_CREATION_FIELD:
sb.Append((new DateTimeOffset(citoyen.DateCreation)).ToUnixTimeSeconds().ToString());
break;
case DATE_MODIFICATION_FIELD:
sb.Append((new DateTimeOffset(citoyen.DateModification)).ToUnixTimeSeconds().ToString());
break;
case AGE_FIELD:
sb.Append(citoyen.Age);
break;
case ADRESSE_CP_FIELD:
sb.Append(citoyen.AdresseCP == null ? "" : citoyen.AdresseCP.Replace("\"", ""));
break;
case ADRESSE_VILLE_FIELD:
sb.Append(citoyen.AdresseVille == null ? "" : citoyen.AdresseVille.Replace("\"", ""));
break;
case ADRESSE_PRINCIPALE_FIELD:
sb.Append(citoyen.AdressePrincipale == null ? "" : citoyen.AdressePrincipale.Replace("\"", ""));
break;
case ADRESSE_PRINCIPALE_CP_FIELD:
sb.Append(citoyen.AdressePrincipaleCP == null ? "" : citoyen.AdressePrincipaleCP.Replace("\"", ""));
break;
case ADRESSE_PRINCIPALE_VILLE_FIELD:
sb.Append(citoyen.AdressePrincipaleVille == null ? "" : citoyen.AdressePrincipaleVille.Replace("\"", ""));
break;
case ADRESSE_SECONDAIRE_FIELD:
sb.Append(citoyen.AdresseSecondaire == null ? "" : citoyen.AdresseSecondaire.Replace("\"", ""));
break;
case ADRESSE_SECONDAIRE_CP_FIELD:
sb.Append(citoyen.AdresseSecondaireCP == null ? "" : citoyen.AdresseSecondaireCP.Replace("\"", ""));
break;
case ADRESSE_SECONDAIRE_VILLE_FIELD:
sb.Append(citoyen.AdresseSecondaireVille == null ? "" : citoyen.AdresseSecondaireVille.Replace("\"", ""));
break;
default:
break;
}
sb.Append("\"");
if(i < fields.Length - 1) {
sb.Append(";");
}
}
}
return sb.ToString();
}
public static string[] ParseHeader(string line) {
TextFieldParser parser = new TextFieldParser(new StringReader(line));
parser.HasFieldsEnclosedInQuotes = true;
parser.SetDelimiters(";");
return parser.ReadFields();
}
public Citoyen Deserialize(string line) {
TextFieldParser parser = new TextFieldParser(new StringReader(line));
parser.HasFieldsEnclosedInQuotes = true;
parser.SetDelimiters(";");
string[] props = parser.ReadFields();
if(props == null || props.Length != fields.Length) {
return null;
}
Citoyen citoyen = new Citoyen();
for(int i = 0; i < fields.Length; i++) {
switch(fields[i]) {
case CIVILITE_FIELD:
citoyen.Civilite = props[i];
break;
case NOM_FIELD:
citoyen.Nom = props[i];
break;
case NOM_NAISSANCE_FIELD:
citoyen.NomNaissance = props[i];
break;
case PRENOM_FIELD:
citoyen.Prenom = props[i];
break;
case DATE_NAISSANCE_FIELD:
if(!string.IsNullOrWhiteSpace(props[i])) {
try {
citoyen.DateNaissance = DateTimeOffset.FromUnixTimeSeconds(long.Parse(props[i])).LocalDateTime;
} catch(Exception) {}
}
break;
case PROFESSION_FIELD:
citoyen.Profession = props[i];
break;
case TYPE_RESIDENCE_FIELD:
try {
citoyen.TypeResidence = bool.Parse(props[i]);
} catch(Exception) {}
break;
case MAIL_FIELD:
citoyen.Mail = props[i];
break;
case TEL_FIELD:
citoyen.Tel = props[i];
break;
case TEL_PORT_FIELD:
citoyen.TelPort = props[i];
break;
case QUARTIER_FIELD:
citoyen.Quartier = props[i];
break;
case ADRESSE_FIELD:
citoyen.Adresse = props[i];
break;
case ADRESSE_BATIMENT_FIELD:
citoyen.AdresseBatiment = props[i];
break;
case ADRESSE_NUMERO_BATIMENT_FIELD:
citoyen.AdresseNumeroBatiment = props[i];
break;
case ADRESSE_EXT_FIELD:
citoyen.AdresseExt = props[i];
break;
case ADRESSE_EXT_CP_FIELD:
citoyen.AdresseExtCP = props[i];
break;
case ADRESSE_EXT_VILLE_FIELD:
citoyen.AdresseExtVille = props[i];
break;
case DATE_CREATION_FIELD:
try {
citoyen.DateCreation = DateTimeOffset.FromUnixTimeSeconds(long.Parse(props[i])).LocalDateTime;
} catch(Exception) {
citoyen.DateCreation = DateTime.Now;
}
break;
case DATE_MODIFICATION_FIELD:
try {
citoyen.DateModification = DateTimeOffset.FromUnixTimeSeconds(long.Parse(props[i])).LocalDateTime;
} catch(Exception) {
citoyen.DateModification = DateTime.Now;
}
break;
default:
break;
}
}
return citoyen;
}
}
}

View File

@ -65,9 +65,8 @@
<Reference Include="EntityFramework.SqlServerCompact, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<HintPath>packages\EntityFramework.SqlServerCompact.6.4.4\lib\net45\EntityFramework.SqlServerCompact.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Office.Interop.Excel, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
<HintPath>packages\Microsoft.Office.Interop.Excel.15.0.4795.1000\lib\net20\Microsoft.Office.Interop.Excel.dll</HintPath>
<EmbedInteropTypes>True</EmbedInteropTypes>
<Reference Include="isendpro, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>packages\iSendProSMS.1.1.3\lib\isendpro.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Office.Interop.Outlook, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
<HintPath>packages\Microsoft.Office.Interop.Outlook.15.0.4797.1003\lib\net20\Microsoft.Office.Interop.Outlook.dll</HintPath>
@ -77,10 +76,12 @@
<HintPath>packages\Microsoft.Office.Interop.Word.15.0.4797.1003\lib\net20\Microsoft.Office.Interop.Word.dll</HintPath>
<EmbedInteropTypes>True</EmbedInteropTypes>
</Reference>
<Reference Include="Microsoft.VisualBasic" />
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="RestSharp.Net2, Version=102.7.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>packages\RestSharp.Net2.1.1.11\lib\net20\RestSharp.Net2.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.Data" />
@ -108,28 +109,18 @@
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</ApplicationDefinition>
<Compile Include="CitoyensSerializer.cs" />
<Compile Include="Converter\NegateBoolean.cs" />
<Compile Include="ImportWindow.xaml.cs">
<DependentUpon>ImportWindow.xaml</DependentUpon>
</Compile>
<Compile Include="InputWindow.xaml.cs">
<DependentUpon>InputWindow.xaml</DependentUpon>
</Compile>
<Compile Include="Migrations\202012281505590_V1.cs" />
<Compile Include="Migrations\202012281505590_V1.designer.cs">
<DependentUpon>202012281505590_V1.cs</DependentUpon>
</Compile>
<Compile Include="Migrations\202012292127194_V2.cs" />
<Compile Include="Migrations\202012292127194_V2.designer.cs">
<DependentUpon>202012292127194_V2.cs</DependentUpon>
<Compile Include="Migrations\202012051414539_V1.cs" />
<Compile Include="Migrations\202012051414539_V1.designer.cs">
<DependentUpon>202012051414539_V1.cs</DependentUpon>
</Compile>
<Compile Include="Migrations\Configuration.cs" />
<Compile Include="Model\Citoyen.cs" />
<Compile Include="Model\Preferences.cs" />
<Compile Include="Model\ModelContext.cs" />
<Compile Include="OVHQueryBody.cs" />
<Compile Include="OVHResponseBody.cs" />
<Compile Include="PreferencesWindow.xaml.cs">
<DependentUpon>PreferencesWindow.xaml</DependentUpon>
</Compile>
@ -143,10 +134,6 @@
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="ImportWindow.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="InputWindow.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
@ -189,11 +176,8 @@
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<EmbeddedResource Include="Migrations\202012281505590_V1.resx">
<DependentUpon>202012281505590_V1.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Migrations\202012292127194_V2.resx">
<DependentUpon>202012292127194_V2.cs</DependentUpon>
<EmbeddedResource Include="Migrations\202012051414539_V1.resx">
<DependentUpon>202012051414539_V1.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
@ -227,43 +211,6 @@
<ItemGroup>
<Resource Include="hermes.ico" />
</ItemGroup>
<ItemGroup>
<SplashScreen Include="hermes_splash.png" />
</ItemGroup>
<ItemGroup>
<Resource Include="doc\img\main.png" />
</ItemGroup>
<ItemGroup>
<Resource Include="doc\img\add.png" />
<Resource Include="doc\img\first_launch_1.png" />
<Resource Include="doc\img\first_launch_2.png" />
<Resource Include="doc\img\list_1.png" />
<Resource Include="doc\img\list_2.png" />
<Resource Include="doc\img\menu_display.png" />
<Resource Include="doc\img\menu_edit.png" />
<Resource Include="doc\img\menu_file.png" />
<Resource Include="doc\img\menu_tools.png" />
<Resource Include="doc\img\smartscreen_1.png" />
<Resource Include="doc\img\smartscreen_2.png" />
</ItemGroup>
<ItemGroup>
<Resource Include="doc\img\publi_1.png" />
<Resource Include="doc\img\publi_2.png" />
<Resource Include="doc\img\publi_3.png" />
</ItemGroup>
<ItemGroup>
<Resource Include="doc\img\ovh_1.png" />
<Resource Include="doc\img\ovh_2.png" />
<Resource Include="doc\img\ovh_3.png" />
<Resource Include="doc\img\ovh_4.png" />
<Resource Include="doc\img\ovh_5.png" />
<Resource Include="doc\img\ovh_6.png" />
<Resource Include="doc\img\ovh_7.png" />
</ItemGroup>
<ItemGroup>
<Resource Include="doc\img\sms_1.png" />
<Resource Include="doc\img\sms_2.png" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>

View File

@ -1,33 +0,0 @@
<Window x:Class="Hermes.ImportWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Hermes"
mc:Ignorable="d"
ResizeMode="NoResize"
WindowStartupLocation="CenterOwner"
Title="Importer" Height="310" Width="230"
Closing="Window_Closing">
<Grid Background="WhiteSmoke">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="45"/>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Margin="5,5,5,0">
<Label>Feuille à importer :</Label>
<ComboBox Name="sheetComboBox" Height="23"/>
<Label>Quartier à définir</Label>
<TextBox Name="quartierTextBox" VerticalContentAlignment="Center" Height="23"/>
<Label>Nom de rue à définir</Label>
<TextBox Name="adresseTextBox" VerticalContentAlignment="Center" Height="23"/>
<Label>Bâtiment à définir</Label>
<TextBox Name="batimentTextBox" VerticalContentAlignment="Center" Height="23"/>
<WrapPanel>
<Label>Résidence</Label>
<CheckBox Name="residenceCheckBox" VerticalAlignment="Center"/>
</WrapPanel>
</StackPanel>
<Button Name="importButton" IsDefault="true" Grid.Row="1" Width="100" Height="25" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="0,0,5,0" Click="Importer_Click">Importer</Button>
</Grid>
</Window>

View File

@ -1,139 +0,0 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.InteropServices;
using System.Text.RegularExpressions;
using System.Windows;
using Hermes.Model;
using Excel = Microsoft.Office.Interop.Excel;
namespace Hermes {
public partial class ImportWindow : Window {
private bool importing = false;
private Excel.Application xlApp;
private Excel.Workbook xlWb;
private static Regex communeRgx = new Regex(@"(\d{5})(.*)");
private static string prepareValue(object value, bool notNull = false) {
if(value != null) {
return value.ToString().Trim();
}
if(notNull) {
return "";
} else {
return null;
}
}
public ImportWindow(Window parent, string filepath) {
InitializeComponent();
Owner = parent;
List<string> sheets = new List<string>();
adresseTextBox.Text = Path.GetFileNameWithoutExtension(filepath);
xlApp = new Excel.Application();
xlWb = xlApp.Workbooks.Open(filepath);
for(int i = 1; i <= xlWb.Sheets.Count; i++) {
Excel.Worksheet sheet = xlWb.Sheets.Item[i];
sheets.Add(sheet.Name);
}
sheetComboBox.ItemsSource = sheets;
if(sheets.Count == 0) {
importButton.IsEnabled = false;
} else {
sheetComboBox.SelectedIndex = 0;
}
}
private void Importer_Click(object sender, RoutedEventArgs e) {
importing = true;
Excel.Worksheet sheet = xlWb.Sheets.Item[sheetComboBox.SelectedIndex + 1];
string cell = prepareValue(sheet.Cells[1, "J"].Value);
bool complement = false;
string rue = adresseTextBox.Text == null ? "" : adresseTextBox.Text;
if(!string.IsNullOrEmpty(cell)) {
complement = true;
}
for(int i = 2; string.IsNullOrEmpty(prepareValue(sheet.Cells[i, "A"].Value)) != true ; i++) {
Citoyen citoyen = new Citoyen();
citoyen.Nom = prepareValue(sheet.Cells[i, "A"].Value);
citoyen.Prenom = prepareValue(sheet.Cells[i, "B"].Value);
if(complement) {
string num = prepareValue(sheet.Cells[i, "D"].Value);
if(residenceCheckBox.IsChecked == true) {
citoyen.Adresse = rue;
citoyen.AdresseNumeroBatiment = num;
} else {
citoyen.Adresse = $"{num} {rue}";
}
citoyen.Mail = prepareValue(sheet.Cells[i, "E"].Value);
citoyen.Tel = prepareValue(sheet.Cells[i, "F"].Value);
citoyen.TelPort = prepareValue(sheet.Cells[i, "G"].Value);
string res = prepareValue(sheet.Cells[i, "H"].Value, true);
if(res.ToLower().Replace(" ", "").Equals("r.secondaire")) {
citoyen.TypeResidence = true;
} else {
citoyen.TypeResidence = false;
}
if(citoyen.TypeResidence == true) {
citoyen.AdresseExt = prepareValue(sheet.Cells[i, "I"].Value);
Match m = communeRgx.Match(prepareValue(sheet.Cells[i, "J"].Value, true));
if(m.Success) {
citoyen.AdresseExtCP = m.Groups[1].Value.Trim();
citoyen.AdresseExtVille = m.Groups[2].Value.Trim();
}
}
} else {
string num = prepareValue(sheet.Cells[i, "C"].Value);
if(residenceCheckBox.IsChecked == true) {
citoyen.Adresse = rue;
citoyen.AdresseNumeroBatiment = num;
} else {
citoyen.Adresse = $"{num} {rue}";
}
citoyen.Mail = prepareValue(sheet.Cells[i, "D"].Value);
citoyen.Tel = prepareValue(sheet.Cells[i, "E"].Value);
citoyen.TelPort = prepareValue(sheet.Cells[i, "F"].Value);
string res = prepareValue(sheet.Cells[i, "G"].Value, true);
if(res.ToLower().Replace(" ", "").Equals("r.secondaire")) {
citoyen.TypeResidence = true;
} else {
citoyen.TypeResidence = false;
}
if(citoyen.TypeResidence == true) {
citoyen.AdresseExt = prepareValue(sheet.Cells[i, "H"].Value);
Match m = communeRgx.Match(prepareValue(sheet.Cells[i, "I"].Value, true));
if(m.Success) {
citoyen.AdresseExtCP = m.Groups[1].Value.Trim();
citoyen.AdresseExtVille = m.Groups[2].Value.Trim();
}
}
}
citoyen.AdresseBatiment = batimentTextBox.Text;
citoyen.Quartier = quartierTextBox.Text;
citoyen.DateCreation = DateTime.Now;
citoyen.DateModification = DateTime.Now;
ModelContext.Getinstance().CitoyenSet.Add(citoyen);
}
ModelContext.Getinstance().SaveChanges();
Marshal.FinalReleaseComObject(sheet);
importing = false;
}
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) {
if(importing) {
e.Cancel = true;
return;
}
xlWb.Close();
Marshal.FinalReleaseComObject(xlWb);
xlApp.Quit();
Marshal.FinalReleaseComObject(xlApp);
}
}
}

View File

@ -99,12 +99,30 @@
}
"Entry"
{
"MsmKey" = "8:_A0F83BCCDBA77804851DAAE18F54AC65"
"OwnerKey" = "8:_C4AD2B19587A5D3179211CF729B66A33"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_A0F83BCCDBA77804851DAAE18F54AC65"
"OwnerKey" = "8:_EDA497A114444E23814EEE023731C727"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_A3A39C8B97A947A09D3B1660AC88FF5E"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_C4AD2B19587A5D3179211CF729B66A33"
"OwnerKey" = "8:_EDA497A114444E23814EEE023731C727"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_C767BE5A43214C2C9E31CD47DB92AA96"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@ -148,11 +166,23 @@
"Entry"
{
"MsmKey" = "8:_F434633E0B073F068C7E19B9E5AB2EC4"
"OwnerKey" = "8:_C4AD2B19587A5D3179211CF729B66A33"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_F434633E0B073F068C7E19B9E5AB2EC4"
"OwnerKey" = "8:_EDA497A114444E23814EEE023731C727"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_F434633E0B073F068C7E19B9E5AB2EC4"
"OwnerKey" = "8:_A0F83BCCDBA77804851DAAE18F54AC65"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_EDA497A114444E23814EEE023731C727"
"MsmSig" = "8:_UNDEFINED"
@ -160,6 +190,18 @@
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_C4AD2B19587A5D3179211CF729B66A33"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_A0F83BCCDBA77804851DAAE18F54AC65"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_F434633E0B073F068C7E19B9E5AB2EC4"
"MsmSig" = "8:_UNDEFINED"
}
@ -245,7 +287,7 @@
"InstallerBootstrapper" = "3:2"
"BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}"
{
"Enabled" = "11:FALSE"
"Enabled" = "11:TRUE"
"PromptEnabled" = "11:TRUE"
"PrerequisitesLocation" = "2:1"
"Url" = "8:"
@ -561,6 +603,37 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_A0F83BCCDBA77804851DAAE18F54AC65"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
"AssemblyAsmDisplayName" = "8:RestSharp.Net2, Version=102.7.0.0, Culture=neutral, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_A0F83BCCDBA77804851DAAE18F54AC65"
{
"Name" = "8:RestSharp.Net2.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:RestSharp.Net2.dll"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_358759A83B6F4CD5AEAA9CCDB02A52A0"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A3A39C8B97A947A09D3B1660AC88FF5E"
{
"SourcePath" = "8:..\\bin\\Release\\amd64\\sqlcecompact40.dll"
@ -581,6 +654,37 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_C4AD2B19587A5D3179211CF729B66A33"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
"AssemblyAsmDisplayName" = "8:isendpro, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_C4AD2B19587A5D3179211CF729B66A33"
{
"Name" = "8:isendpro.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:isendpro.dll"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_358759A83B6F4CD5AEAA9CCDB02A52A0"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C767BE5A43214C2C9E31CD47DB92AA96"
{
"SourcePath" = "8:..\\bin\\Release\\amd64\\sqlceqp40.dll"
@ -812,15 +916,15 @@
{
"Name" = "8:Microsoft Visual Studio"
"ProductName" = "8:Hermes"
"ProductCode" = "8:{3B44B09A-1491-4CE0-A6A5-ABD54F4C14F8}"
"PackageCode" = "8:{618674BD-7E73-4707-ABF3-4183A348D565}"
"ProductCode" = "8:{D2CA66FB-020C-41EF-BD0D-991FFC306669}"
"PackageCode" = "8:{89CBF16D-49D3-4DE5-9CEE-4CE55ADD05AE}"
"UpgradeCode" = "8:{A8FB75F3-57A5-4B7D-A0AE-9E87F69529B0}"
"AspNetVersion" = "8:2.0.50727.0"
"RestartWWWService" = "11:FALSE"
"RemovePreviousVersions" = "11:TRUE"
"DetectNewerInstalledVersion" = "11:TRUE"
"InstallAllUsers" = "11:FALSE"
"ProductVersion" = "8:1.0.0"
"ProductVersion" = "8:0.9.1"
"Manufacturer" = "8:Aztrom"
"ARPHELPTELEPHONE" = "8:"
"ARPHELPLINK" = "8:"
@ -1362,7 +1466,7 @@
{
"{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_EDA497A114444E23814EEE023731C727"
{
"SourcePath" = "8:..\\obj\\Release\\Hermes.exe"
"SourcePath" = "8:..\\obj\\Debug\\Hermes.exe"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_358759A83B6F4CD5AEAA9CCDB02A52A0"

View File

@ -7,7 +7,7 @@
mc:Ignorable="d"
Loaded="Window_Loaded"
WindowStartupLocation="CenterScreen"
Title="Hermes" MinHeight="360" MinWidth="1010">
Title="Hermes" Height="640" Width="1024">
<Window.Resources>
<BooleanToVisibilityConverter x:Key="Bool2VisibilityConv"/>
<CollectionViewSource x:Key="citoyenCollectionViewSource"/>
@ -17,43 +17,38 @@
<RowDefinition Height="20"/>
<RowDefinition Height="90"/>
<RowDefinition Height="*"/>
<RowDefinition Height="20"/>
</Grid.RowDefinitions>
<Menu Grid.Row="0" Background="White">
<MenuItem Header="Fichier">
<MenuItem Header="Exporter" Click="Exporter_Click"/>
<MenuItem Header="Importer" Click="Importer_Click" />
<MenuItem Header="Quitter" Click="Quitter_Click"/>
</MenuItem>
<MenuItem Header="Édition">
<MenuItem Header="Ajouter..." Click="Ajouter_Click"/>
<MenuItem Header="Édition multiple">
<MenuItem Header="Adresse" Click="GroupEdit_Adresse"/>
<MenuItem Header="Édition groupée">
<MenuItem Header="Quartier" Click="GroupEdit_Quartier"/>
<MenuItem Header="Bâtiment" Click="GroupEdit_Batiment"/>
</MenuItem>
<MenuItem Header="Supprimer" Click="Supprimer_Click"/>
</MenuItem>
<MenuItem Name="viewMenu" Header="Affichage">
<MenuItem Name="civiliteViewCheckBox" Header="Civilité" IsCheckable="true" IsChecked="{Binding Path=civiliteViewEnabled}"/>
<MenuItem Name="nomViewCheckBox" Header="Nom" IsCheckable="true" IsChecked="{Binding Path=nomViewEnabled}"/>
<MenuItem Name="nomNaissanceViewCheckBox" Header="Nom de naissance" IsCheckable="true" IsChecked="{Binding Path=nomNaissanceViewEnabled}"/>
<MenuItem Name="prenomViewCheckBox" Header="Prénom" IsCheckable="true" IsChecked="{Binding Path=prenomViewEnabled}"/>
<MenuItem Name="ageViewCheckBox" Header="Age" IsCheckable="true" IsChecked="{Binding Path=ageViewEnabled}"/>
<MenuItem Name="professionViewCheckBox" Header="Profession" IsCheckable="true" IsChecked="{Binding Path=professionViewEnabled}"/>
<MenuItem Name="typeResidenceViewCheckBox" Header="Résidence" IsCheckable="true" IsChecked="{Binding Path=typeResidenceViewEnabled}"/>
<MenuItem Name="quartierViewCheckBox" Header="Quartier" IsCheckable="true" IsChecked="{Binding Path=quartierViewEnabled}"/>
<MenuItem Name="adresseViewCheckBox" Header="Adresse locale" IsCheckable="true" IsChecked="{Binding Path=adresseViewEnabled}"/>
<MenuItem Name="adresseBatimentViewCheckBox" Header="Bâtiment" IsCheckable="true" IsChecked="{Binding Path=adresseBatimentViewEnabled}"/>
<MenuItem Name="adresseNumeroBatimentViewCheckBox" Header="Numéro d'appartement" IsCheckable="true" IsChecked="{Binding Path=adresseNumeroBatimentViewEnabled}"/>
<MenuItem Name="adresseExtViewCheckBox" Header="Adresse" IsCheckable="true" IsChecked="{Binding Path=adresseExtViewEnabled}"/>
<MenuItem Name="adresseExtCPViewCheckBox" Header="Code postal" IsCheckable="true" IsChecked="{Binding Path=adresseExtCPViewEnabled}"/>
<MenuItem Name="adresseExtVilleViewCheckBox" Header="Ville" IsCheckable="true" IsChecked="{Binding Path=adresseExtVilleViewEnabled}"/>
<MenuItem Name="mailViewCheckBox" Header="E-Mail" IsCheckable="true" IsChecked="{Binding Path=mailViewEnabled}"/>
<MenuItem Name="telViewCheckBox" Header="Téléphone" IsCheckable="true" IsChecked="{Binding Path=telViewEnabled}"/>
<MenuItem Name="telPortViewCheckBox" Header="Mobile" IsCheckable="true" IsChecked="{Binding Path=telPortViewEnabled}"/>
<MenuItem Name="dateCreationViewCheckBox" Header="Date de création" IsCheckable="true" IsChecked="{Binding Path=dateCreationViewEnabled}"/>
<MenuItem Name="dateModificationViewCheckBox" Header="Date de modification" IsCheckable="true" IsChecked="{Binding Path=dateModificationViewEnabled}"/>
<MenuItem Header="Affichage">
<MenuItem Name="civiliteViewCheckBox" Header="Civilité" IsCheckable="true"/>
<MenuItem Name="nomViewCheckBox" Header="Nom" IsCheckable="true" IsChecked="True"/>
<MenuItem Name="nomNaissanceViewCheckBox" Header="Nom de naissance" IsCheckable="true"/>
<MenuItem Name="prenomViewCheckBox" Header="Prénom" IsCheckable="true" IsChecked="True"/>
<MenuItem Name="ageViewCheckBox" Header="Age" IsCheckable="true" IsChecked="True"/>
<MenuItem Name="professionViewCheckBox" Header="Profession" IsCheckable="true"/>
<MenuItem Name="typeResidenceViewCheckBox" Header="Résidence" IsCheckable="true" IsChecked="True"/>
<MenuItem Name="quartierViewCheckBox" Header="Quartier" IsCheckable="true"/>
<MenuItem Name="adresseViewCheckBox" Header="Adresse locale" IsCheckable="true" IsChecked="True"/>
<MenuItem Name="adresseBatimentViewCheckBox" Header="Bâtiment" IsCheckable="true"/>
<MenuItem Name="adresseExtViewCheckBox" Header="Adresse" IsCheckable="true"/>
<MenuItem Name="adresseExtCPViewCheckBox" Header="Code postal" IsCheckable="true"/>
<MenuItem Name="adresseExtVilleViewCheckBox" Header="Ville" IsCheckable="true"/>
<MenuItem Name="mailViewCheckBox" Header="E-Mail" IsCheckable="true"/>
<MenuItem Name="telViewCheckBox" Header="Téléphone" IsCheckable="true"/>
<MenuItem Name="telPortViewCheckBox" Header="Mobile" IsCheckable="true"/>
<MenuItem Name="dateCreationViewCheckBox" Header="Date de création" IsCheckable="true"/>
<MenuItem Name="dateModificationViewCheckBox" Header="Date de modification" IsCheckable="true"/>
</MenuItem>
<MenuItem Header="Communication">
<MenuItem Header="Courriel..." Click="Courriel_Click"/>
@ -115,7 +110,6 @@
<DataGridTextColumn Header="Quartier" Visibility="{Binding Source={x:Reference quartierViewCheckBox}, Path=IsChecked, Converter={StaticResource Bool2VisibilityConv}}" Binding="{Binding Quartier}" Width="*"/>
<DataGridTextColumn Header="Adresse Locale" Visibility="{Binding Source={x:Reference adresseViewCheckBox}, Path=IsChecked, Converter={StaticResource Bool2VisibilityConv}}" Binding="{Binding Adresse}" Width="*"/>
<DataGridTextColumn Header="Bâtiment" Visibility="{Binding Source={x:Reference adresseBatimentViewCheckBox}, Path=IsChecked, Converter={StaticResource Bool2VisibilityConv}}" Binding="{Binding AdresseBatiment}" Width="*"/>
<DataGridTextColumn Header="Numéro d'appartement" Visibility="{Binding Source={x:Reference adresseNumeroBatimentViewCheckBox}, Path=IsChecked, Converter={StaticResource Bool2VisibilityConv}}" Binding="{Binding AdresseNumeroBatiment}" Width="*"/>
<DataGridTextColumn Header="Adresse" Visibility="{Binding Source={x:Reference adresseExtViewCheckBox}, Path=IsChecked, Converter={StaticResource Bool2VisibilityConv}}" Binding="{Binding AdresseExt}" Width="*"/>
<DataGridTextColumn Header="Code postal" Visibility="{Binding Source={x:Reference adresseExtCPViewCheckBox}, Path=IsChecked, Converter={StaticResource Bool2VisibilityConv}}" Binding="{Binding AdresseExtCP}" Width="*"/>
<DataGridTextColumn Header="Ville" Visibility="{Binding Source={x:Reference adresseExtVilleViewCheckBox}, Path=IsChecked, Converter={StaticResource Bool2VisibilityConv}}" Binding="{Binding AdresseExtVille}" Width="*"/>
@ -126,21 +120,5 @@
<DataGridTextColumn Header="Date de modification" Visibility="{Binding Source={x:Reference dateModificationViewCheckBox}, Path=IsChecked, Converter={StaticResource Bool2VisibilityConv}}" Binding="{Binding DateModification, StringFormat='dd/MM/yyyy HH:mm'}" Width="*"/>
</DataGrid.Columns>
</DataGrid>
<StatusBar Grid.Row="3">
<StatusBarItem Margin="0,0,30,0">
<TextBlock>
<Run Text="Affichés : "/>
<Run Text="{Binding ElementName=dgCitoyens, Path=Items.Count, Mode=OneWay}"/>
<Run Text=" éléments"/>
</TextBlock>
</StatusBarItem>
<StatusBarItem>
<TextBlock>
<Run Text="Sélectionnés : "/>
<Run Text="{Binding ElementName=dgCitoyens, Path=SelectedItems.Count, Mode=OneWay}"/>
<Run Text=" éléments"/>
</TextBlock>
</StatusBarItem>
</StatusBar>
</Grid>
</Window>

View File

@ -14,63 +14,22 @@ namespace Hermes {
private ModelContext dbContext = null;
private CollectionViewSource citoyenCollectionViewSource = null;
private bool isEnabledFilter = false;
private Preferences pref = null;
public MainWindow() {
dbContext = ModelContext.Getinstance();
//dbContext.Database.Log = log => System.Console.WriteLine(log);
dbContext.Database.CreateIfNotExists();
dbContext.CitoyenSet.Load();
dbContext.Preferences.Load();
if(dbContext.Preferences.Local.Count == 0) {
pref = new Preferences();
pref.civiliteViewEnabled = false;
pref.nomViewEnabled = true;
pref.nomNaissanceViewEnabled = false;
pref.prenomViewEnabled = true;
pref.ageViewEnabled = false;
pref.professionViewEnabled = false;
pref.typeResidenceViewEnabled = false;
pref.mailViewEnabled = false;
pref.telViewEnabled = false;
pref.telPortViewEnabled = false;
pref.quartierViewEnabled = false;
pref.adresseViewEnabled = true;
pref.adresseBatimentViewEnabled = false;
pref.adresseNumeroBatimentViewEnabled = false;
pref.adresseExtViewEnabled = false;
pref.adresseExtCPViewEnabled = false;
pref.adresseExtVilleViewEnabled = false;
pref.dateCreationViewEnabled = false;
pref.dateModificationViewEnabled = false;
pref.windowWidth = 1024;
pref.windowHeight = 640;
pref.windowMaximized = false;
dbContext.Preferences.Add(pref);
dbContext.SaveChanges();
}
pref = dbContext.Preferences.Local[0];
InitializeComponent();
Height = pref.windowHeight;
Width = pref.windowWidth;
if(pref.windowMaximized) {
WindowState = WindowState.Maximized;
} else {
WindowState = WindowState.Normal;
}
viewMenu.DataContext = pref;
}
private void Window_Loaded(object sender, RoutedEventArgs e) {
dbContext.CitoyenSet.Load();
dbContext.Preferences.Load();
citoyenCollectionViewSource = (CollectionViewSource) this.FindResource("citoyenCollectionViewSource");
citoyenCollectionViewSource.Source = dbContext.CitoyenSet.Local;
if(string.IsNullOrWhiteSpace(pref.VilleCP) || string.IsNullOrWhiteSpace(pref.Ville)) {
if(dbContext.Preferences.Local.Count == 0) {
MessageBox.Show("Il s'agit du premier lancement de Hermes. Veuillez renseigner les informations sur votre commune.", "Premier lancement", MessageBoxButton.OK, MessageBoxImage.None);
PreferencesWindow preferencesWindow = new PreferencesWindow(this);
preferencesWindow.ShowDialog();
@ -89,7 +48,7 @@ namespace Hermes {
private void GroupEdit_Batiment(object sender, RoutedEventArgs e) {
if(dgCitoyens.SelectedItems.Count == 0) {
MessageBox.Show("Aucun citoyen sélectionné.", "Édition multiple", MessageBoxButton.OK, MessageBoxImage.Exclamation);
MessageBox.Show("Aucun citoyen sélectionné.", "Édition groupée", MessageBoxButton.OK, MessageBoxImage.Exclamation);
return;
}
@ -105,7 +64,7 @@ namespace Hermes {
private void GroupEdit_Quartier(object sender, RoutedEventArgs e) {
if(dgCitoyens.SelectedItems.Count == 0) {
MessageBox.Show("Aucun citoyen sélectionné.", "Édition multiple", MessageBoxButton.OK, MessageBoxImage.Exclamation);
MessageBox.Show("Aucun citoyen sélectionné.", "Édition groupée", MessageBoxButton.OK, MessageBoxImage.Exclamation);
return;
}
@ -119,22 +78,6 @@ namespace Hermes {
}
}
private void GroupEdit_Adresse(object sender, RoutedEventArgs e) {
if(dgCitoyens.SelectedItems.Count == 0) {
MessageBox.Show("Aucun citoyen sélectionné.", "Édition multiple", MessageBoxButton.OK, MessageBoxImage.Exclamation);
return;
}
InputWindow inputBox = new InputWindow("Associer une adresse :", "Entrez un numéro et un nom de rue :", this);
if(inputBox.ShowDialog() == true) {
foreach(Citoyen citoyen in dgCitoyens.SelectedItems) {
citoyen.Adresse = inputBox.InputText;
citoyen.DateModification = DateTime.Now;
}
dbContext.SaveChanges();
}
}
private void Supprimer_Click(object sender, RoutedEventArgs e) {
if(dgCitoyens.SelectedItems.Count > 0) {
MessageBoxResult result = MessageBox.Show("Voulez-vous supprimer ces citoyens ?", "Suppression", MessageBoxButton.YesNo, MessageBoxImage.Question);
@ -168,10 +111,7 @@ namespace Hermes {
}
if(rcps.Count > 0) {
if(noTel) {
result = MessageBox.Show("Certains des citoyens sélectionnés ne disposent pas d'un numéro de mobile. Voulez-vous continuer ?", "Envoi de SMS", MessageBoxButton.YesNo, MessageBoxImage.Exclamation);
if(result == MessageBoxResult.No) {
return;
}
MessageBox.Show("Certains des citoyens sélectionnés ne disposent pas d'un numéro de mobile.", "Envoi de SMS", MessageBoxButton.OK, MessageBoxImage.Exclamation);
}
SmsWindow smsWindow = new SmsWindow(this, rcps);
smsWindow.ShowDialog();
@ -200,10 +140,7 @@ namespace Hermes {
}
if(mails.Count > 0) {
if(noMail) {
result = MessageBox.Show("Certains des citoyens sélectionnés ne disposent pas d'une adresse E-Mail. Voulez-vous continuer ?", "Envoi de courriel", MessageBoxButton.YesNo, MessageBoxImage.Exclamation);
if(result == MessageBoxResult.No) {
return;
}
MessageBox.Show("Certains des citoyens sélectionnés ne disposent pas d'une adresse E-Mail.", "Envoi de courriel", MessageBoxButton.OK, MessageBoxImage.Exclamation);
}
Microsoft.Office.Interop.Outlook.Application app = new Microsoft.Office.Interop.Outlook.Application();
Microsoft.Office.Interop.Outlook.MailItem mailItem = app.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem);
@ -228,7 +165,7 @@ namespace Hermes {
MessageBoxResult result = MessageBox.Show("Voulez-vous réaliser une tâche de publipostage pour ces citoyens ?", "Publipostage", MessageBoxButton.YesNo, MessageBoxImage.Question);
if(result == MessageBoxResult.Yes) {
string csvPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "hermes_tmp_datasource.csv");
string csvHeader = "\"Civilité\";\"Nom\";\"Nom de naissance\";\"Prénom\";\"Profession\";\"Type de résidence\";\"E-Mail\";\"Téléphone\";\"Mobile\";\"Quartier\";\"Bâtiment\";\"Numéro appartement\";\"Adresse locale\";\"Code postal local\";\"Ville locale\";\"Adresse principale\";\"Code postal principal\";\"Ville principale\";\"Adresse secondaire\";\"Code postal secondaire\";\"Ville secondaire\"";
string csvHeader = "\"Civilité\";\"Nom\";\"Nom de naissance\";\"Prénom\";\"Profession\";\"Type de résidence\";\"E-Mail\";\"Téléphone\";\"Mobile\";\"Quartier\";\"Bâtiment\";\"Adresse principale\";\"Code postal principal\";\"Ville principale\";\"Adresse secondaire\";\"Code postal secondaire\";\"Ville secondaire\"";
StringBuilder sb = new StringBuilder();
sb.AppendLine(csvHeader);
foreach(Citoyen citoyen in dgCitoyens.SelectedItems) {
@ -243,10 +180,6 @@ namespace Hermes {
string telPort = citoyen.TelPort == null ? "" : citoyen.TelPort;
string quartier = citoyen.Quartier == null ? "" : citoyen.Quartier;
string batiment = citoyen.AdresseBatiment == null ? "" : citoyen.AdresseBatiment;
string numeroBatiment = citoyen.AdresseNumeroBatiment == null ? "" : citoyen.AdresseNumeroBatiment;
string adresseLocale = citoyen.Adresse == null ? "" : citoyen.Adresse;
string cpLocal = citoyen.AdresseCP == null ? "" : citoyen.AdresseCP;
string villeLocale = citoyen.AdresseVille == null ? "" : citoyen.AdresseVille;
string adressePrincipale = citoyen.AdressePrincipale == null ? "" : citoyen.AdressePrincipale;
string cpPrincipal = citoyen.AdressePrincipaleCP == null ? "" : citoyen.AdressePrincipaleCP;
string villePrincipale = citoyen.AdressePrincipaleVille == null ? "" : citoyen.AdressePrincipaleVille;
@ -254,14 +187,9 @@ namespace Hermes {
string cpSecondaire = citoyen.AdresseSecondaireCP == null ? "" : citoyen.AdresseSecondaireCP;
string villeSecondaire = citoyen.AdresseSecondaireVille == null ? "" : citoyen.AdresseSecondaireVille;
sb.AppendLine($"\"{civilite}\";\"{nom}\";\"{nomNaissance}\";\"{prenom}\";\"{profession}\";\"{typeResidence}\";\"{mail}\";\"{tel}\";\"{telPort}\";\"{quartier}\";\"{batiment}\";\"{numeroBatiment}\";\"{adresseLocale}\";\"{cpLocal}\";{villeLocale};\"{adressePrincipale}\";\"{cpPrincipal}\";\"{villePrincipale}\";\"{adresseSecondaire}\";\"{cpSecondaire}\";\"{villeSecondaire}\"");
}
sb.AppendLine($"\"{civilite}\";\"{nom}\";\"{nomNaissance}\";\"{prenom}\";\"{profession}\";\"{typeResidence}\";\"{mail}\";\"{tel}\";\"{telPort}\";\"{quartier}\";\"{batiment}\";\"{adressePrincipale}\";\"{cpPrincipal}\";\"{villePrincipale}\";\"{adresseSecondaire}\";\"{cpSecondaire}\";\"{villeSecondaire}\"");
try {
File.WriteAllText(csvPath, sb.ToString(), Encoding.GetEncoding("ISO-8859-1"));
} catch(Exception) {
MessageBox.Show("Erreur lors de la préparation des données pour le publipostage.", "Publipostage", MessageBoxButton.OK, MessageBoxImage.Error);
return;
}
OpenFileDialog ofd = new OpenFileDialog();
@ -279,84 +207,6 @@ namespace Hermes {
}
}
private void Importer_Click(object sender, RoutedEventArgs e) {
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Fichiers de données|*.csv|Tous les fichiers|*.*";
if(ofd.ShowDialog() == true) {
if(Path.GetExtension(ofd.FileName).ToLower().Equals(".csv")) {
StreamReader reader = null;
Cursor previousCursor = Mouse.OverrideCursor;
Mouse.OverrideCursor = Cursors.Wait;
try {
reader = File.OpenText(ofd.FileName);
string csvHeader = reader.ReadLine();
if(csvHeader == null) {
return;
}
string[] fields = CitoyensSerializer.ParseHeader(csvHeader);
CitoyensSerializer serializer = new CitoyensSerializer(fields);
while(!reader.EndOfStream) {
string line = reader.ReadLine();
Citoyen citoyen = serializer.Deserialize(line);
if(citoyen != null) {
dbContext.CitoyenSet.Add(citoyen);
}
}
} catch(Exception ex) {
if(ex is IOException || ex is UnauthorizedAccessException) {
MessageBox.Show("Impossible d'ouvrir le fichier. Il est possible qu'il soit déjà utilisé par un autre programme ou que le chemin d'accès soit incorrect.", "Importer", MessageBoxButton.OK, MessageBoxImage.Error);
} else {
MessageBox.Show("Erreur lors de l'import des données.", "Importer", MessageBoxButton.OK, MessageBoxImage.Error);
}
} finally {
Mouse.OverrideCursor = previousCursor;
if(reader != null) {
reader.Close();
}
dbContext.SaveChanges();
}
} else {
ImportWindow importWindow = new ImportWindow(this, ofd.FileName);
importWindow.ShowDialog();
}
}
}
private void Exporter_Click(object sender, RoutedEventArgs e) {
if(dgCitoyens.SelectedItems.Count == 0) {
MessageBox.Show("Aucun citoyen sélectionné.", "Exporter", MessageBoxButton.OK, MessageBoxImage.Exclamation);
return;
}
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "Fichier CSV|*.csv";
sfd.OverwritePrompt = true;
if(sfd.ShowDialog() == true) {
StreamWriter s = null;
Cursor previousCursor = Mouse.OverrideCursor;
Mouse.OverrideCursor = Cursors.Wait;
try {
s = File.CreateText(sfd.FileName);
CitoyensSerializer serializer = new CitoyensSerializer();
s.WriteLine(serializer.GetCsvHeader());
foreach(Citoyen citoyen in dgCitoyens.SelectedItems) {
s.WriteLine(serializer.Serialize(citoyen));
}
} catch(Exception ex) {
if(ex is IOException || ex is UnauthorizedAccessException) {
MessageBox.Show("Impossible d'ouvrir ou de créer le fichier. Il est possible qu'il soit déjà utilisé par un autre programme ou que le chemin d'accès soit incorrect.", "Importer", MessageBoxButton.OK, MessageBoxImage.Error);
} else {
MessageBox.Show("Erreur lors de l'export des données.", "Exporter", MessageBoxButton.OK, MessageBoxImage.Error);
}
} finally {
Mouse.OverrideCursor = previousCursor;
if(s != null) {
s.Close();
}
}
}
}
private void DgCitoyen_DoubleClick(object sender, MouseButtonEventArgs e) {
if(dgCitoyens.SelectedItem != null) {
CitoyenWindow citoyenWindow = new CitoyenWindow(this, (Citoyen) dgCitoyens.SelectedItem);
@ -391,14 +241,6 @@ namespace Hermes {
}
protected override void OnClosed(EventArgs e) {
if(WindowState == WindowState.Maximized) {
pref.windowMaximized = true;
} else {
pref.windowMaximized = false;
}
pref.windowHeight = (int) Height;
pref.windowWidth = (int) Width;
dbContext.SaveChanges();
dbContext.Dispose();
base.OnClosed(e);
Application.Current.Shutdown();
@ -433,12 +275,10 @@ namespace Hermes {
}
}
string addrBat = citoyen.AdresseBatiment == null ? "" : citoyen.AdresseBatiment;
string addr = $"{citoyen.Adresse} {addrBat}".ToLower();
if(!String.IsNullOrEmpty(adresseFilterTextBox.Text)) {
string addrNumBat = citoyen.AdresseNumeroBatiment == null ? "" : citoyen.AdresseNumeroBatiment;
string addrBat = citoyen.AdresseBatiment == null ? "" : citoyen.AdresseBatiment;
string addr = citoyen.Adresse == null ? "" : citoyen.Adresse;
string addrFull = $"{addr} {addrNumBat} {addrBat}".ToLower();
if(!addrFull.Contains(adresseFilterTextBox.Text.ToLower())) {
if(!addr.Contains(adresseFilterTextBox.Text.ToLower())) {
e.Accepted = false;
return;
}

View File

@ -13,7 +13,7 @@ namespace Hermes.Migrations
string IMigrationMetadata.Id
{
get { return "202012281505590_V1"; }
get { return "202012051414539_V1"; }
}
string IMigrationMetadata.Source

View File

@ -25,7 +25,6 @@
Quartier = c.String(maxLength: 4000),
Adresse = c.String(maxLength: 4000),
AdresseBatiment = c.String(maxLength: 4000),
AdresseNumeroBatiment = c.String(maxLength: 4000),
AdresseExt = c.String(maxLength: 4000),
AdresseExtCP = c.String(maxLength: 4000),
AdresseExtVille = c.String(maxLength: 4000),
@ -41,10 +40,7 @@
Id = c.Int(nullable: false, identity: true),
VilleCP = c.String(maxLength: 4000),
Ville = c.String(maxLength: 4000),
ovhSmsServiceName = c.String(maxLength: 4000),
ovhSmsApplicationKey = c.String(maxLength: 4000),
ovhSmsApplicationSecret = c.String(maxLength: 4000),
ovhSmsConsumerKey = c.String(maxLength: 4000),
SmsApiKey = c.String(maxLength: 4000),
})
.PrimaryKey(t => t.Id);

View File

@ -118,7 +118,7 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Target" xml:space="preserve">
<value>H4sIAAAAAAAEAO1a23LbNhB970z/gcNnR7STPLQeKRlHtltP40tDJ+8QuZIxBQEWAD3Wt/Whn9Rf6IJ3grRMyhTb6XTyEi2Acxa3xR6u//rjz/nHp4g5jyAVFXzhnsyOXQd4IELKNws30es3P7gfP3z/3fwijJ6cb0W/d6YfjuRq4T5oHZ96ngoeICJqFtFACiXWehaIyCOh8N4eH//onZx4gBAuYjnO/EvCNY0g/YE/l4IHEOuEsGsRAlO5HVv8FNW5IRGomASwcH8Gif+fpR1d54xRgj74wNauQzgXmmj08PSrAl9LwTd+jAbC7rcxYL81YQpyz0+r7n0ncfzWTMKrBhZQQaK0iAYCnrzLV8Wzh++1tm65arhuF7i+emtmna7dwl1SLbaAyDbX6ZJJ06+5srO8/5GTWY/KvccjYv4dOcuE6UTCgkOiJWFHzl2yYjT4Bbb34jfgC54wVvcJvcK2hgFNd1LEIPX2C6xzT69C1/Ga4zx7YDmsNiabxBXX7966zg2SkxWDcstrE/a1kPATcJBEQ3hHtAbJDQaki9Zit7iW9JEyqqFgxHOGl8V1rsnTZ+Ab/bBw3x8f4/24pE8QFqbcja+c4uXCUVom8BLTjYgmIbkhVCmCV/DwbHcS+BSzOsetbU3LGO8x7LzspFiDUulFPLSjBv8LKIqHr3L0kxAMCO84xrvBrgllE7gM05DcCakPT/RrQqSmIA/PdBZKPFUTXLKc6BMxbyyfYA1zwpskAikmp714mpRreTcl2zfK2ARHxoTGpYQ8+7DD5cAwZAZiFkHXNNgHcO5V2cvOnAYfkzVIEzhV77ymNub/3KbFlZ62KQ74RMdaPD74kfJBPtIAjGkqyrM4Zvnpx/39B1h9CCRMEBczYhRwygT/A8x1dzRAYk0oHvciAzKX3BjBPAqtmICyMA8LKudqTi4D9UE3VZNvVrJyI9Obs1JSebtBGmGqhdJo7Zp4OcVKFXuZLC7ks/eMfp5fkzjGTajp6dzi+JmYXr7xh2vNKMPwAtUhOUtvSyaMSGQDVitSo6eXVCqNrwJZEXMKlmHU6tbY0GfWuaBq7ZkdkKvFL4aY/2fDutSvDVAt4CXOySQ56fSg9KTS2a2R6ccMwojsCO9LwZKIP/dE7BpdidE6RmXtj5SKzTpIahg0via4LKBaS3/EQivWsQpbfxRLCdbBrKYhnlUCseldZe+PZknAOqDV1B8zU4J1qMwywCuwAFLDoPGZgLMwMmN/nEqf1YEqa3+kUn/VgUrjYJxK53TgVY2DcW0V1YFudxnMkUqmDuDUvg+ayRm78UzLPoh5htgNmjcOiwKVvrGDQNUyDLEpcmzUZmsbee5Zj4n9XHmt98qSDvYL2Ot9rCccez+QO0B6PJI7Rx/moSyVTR2iNA7E6UAZgtGhSup4Hc1DsW350Ya3e7yCoZAaO0mKTkN5GsqizdBonviKtRJ0u0vJXibqVkI+z5Pjl6terWw56+I6uGiPmB5gpuxvlYZoZjrM/N+ZOT8glzB7b2p1RbdrwimmKDr7jOGmbY0a2r+nnuUpFbJ+Ra3Jv8RQ8+q++K1l4Gczu7DEH4kMHojs0NAV8sA60piYrfrKaODNKtFosJ1FoRCN2voo2c9Hu0g0mp+dNaEV1a+qB43nHRwEs17tGQ3XLu6MBmzVcsbGtWsoY+N3V2rGZqkVZg4AXX2mPgB44/v0qAHIrrJ0xZ9XVVl6Au5VZflvPLRWlWO07T3MoXm2hjEyQ3fJ4nAkzQrFyDwdBYk9GYbVH9pftXsVGHZVF7JMH+/1SuBUMjfzRtVajFfUHrp4xihOtDXO3Kv//d/8HFOdTQVh/hqQQ2COSAVa9Lnia1FsOM6y7lHRxc6BQBMMieQME4E1CTQ2ByZvM7Wpb4Ql2OUiWkF4xW8THSf6DB+AaMUacnLu7eZPKzBNn+e3sfmlxpgCuklNVL/lnxLKwtLvy46o/gyEOZd5BDVXT5tIutmWSDeC9wTKl+8cYuAm/t5DFDMEU7fcJ4+wj29fFXyGDQm2hUh9HuTljWgu+/ycko0kkcoxqvH4E89wGD19+BuGvwSeBisAAA==</value>
<value>H4sIAAAAAAAEAO2a3VLrNhCA7zvTd/D4mhMHOBc9THLOQICW6eGnGLhX7E3QVJZdSWbIs/Wij9RX6Mr/lk2wg+PpdHqHV9K3q7/V7pK///xr9u01YNYLCElDPrcPJ1PbAu6FPuXruR2r1aef7G9ff/xhduEHr9ZT3u9Y98ORXM7tZ6WiE8eR3jMERE4C6olQhis18cLAIX7oHE2nX5zDQwcQYSPLsmb3MVc0gOQDPxch9yBSMWHXoQ9MZnJscROqdUMCkBHxYG7/AgL/niQdbeuUUYI2uMBWtkU4DxVRaOHJowRXiZCv3QgFhD1sIsB+K8IkZJaflN27TmJ6pCfhlANzlBdLFQY9gYfH2ao45vCd1tYuVg3X7QLXV230rJO1m9sLqsININnUdbJgQverr+wk639gpdKDYu+nky+T6WR6YC1ipmIBcw6xEoQdWHfxklHvV9g8hL8Dn/OYsapNaBW21QQouhNhBEJt7mGVWXrl25ZTH+eYA4thlTHpJK64Oj6yrRtUTpYMii2vTNhVoYCfgYMgCvw7ohQIrhmQLFpDu6FrQV8oowpyjXjO8LLY1jV5/Q58rZ7n9ufpFO/HJX0FPxdlZjxyipcLRykRw3uabsJgFCU3hEpJ8AruX9udAD7GrM5xaxvT0sIHdDvvGxmuQMrkIu7bUM2/B0nx8JWGnoUhA8JbjvF22DWhbASTYRwld6FQ+1f0W0yEoiD2r+nUF3iqRrhkmaIzot9YPsIaZgovXkfVtbgbU9sTZWyEvdM+aiEgCwNMv9XTH+iB+JzTFfV2Ac6cMozYGlygV1+B0B5Mdg4wKmP+DzIaupLTNsYBH+lYu4E8jSiu8NCqtp9RTCwUobgJ+QOpj54WgnZVjZOKWUN2WGWmqz6pFOqCqgfVKLCt0ow0HZkUEbezHVK7PA1KrbVt4sUUy6TJSbOmPLty3kivZtckinATKulWJrHcNNdafHL7pyJBynA82ZKRFNYWmvCekDUYragaLb2kQir0VWRJ9ClY+EGjW21D31jnXFVjz0w3US5+PkT/nQ5rS45MQLmAlzgn/fQm04PCkjINa4xMcl3CiGhxOouQxQF/y3FtG13mKlVGKe1OSnKRKiQR9BpficcNUKWlOzFPJaqsXNadYiQKVZjR1MeyMn+oW1fKu9OMDKEKNJq6M9NEoYpKJT2sAgOQCHqNT+N7g5EKu3PK8L0KKqXdSUV4XgUVwt6cMvpu4ZWNvblJkN2CTOS70HSU0c7TLbsQs5iiHZo19ruhZURsXtCypR+xHhab1HprkzxzDEdvPiVO4y0xgk3zder0dlWDgZ0fry2QDg/Y1tH7ecSKWLiKKIQ9OS2UPoxKHFvlVMQjH5ZGGGh2KbQX4aAR9s2yEOz90nsjJku72BYu0gs+QhiPuRupIJjoDhP3D+aCeAGxgMln/Q+DvNs14RQfQpWmcHbSVivk/3uK6o6UPutWWR89C6X6/Xg3z+xZMjCr2/yFCO+ZiJZMrST3LGYPyWwUeQeD10vVg2FbK9M+CpVRkOlmo1mpHszO1sL0kqoPFaWHsw72wqyWnAfjmhXmwcBGQXlorlk/HppfKRfvAV0Wz/YAr1XNBnUNZu23zTN8qPbbEbhT7fe/8QQatdfBtnc/h6ZRWd2R3K+Q2izPdaqUbiuTpsEkHtBliFNJzcwaZWMRPlBEbdMzRJW1GUbPnOrvXGbn+JquS4T+1QsHT9/NEpr3ueKrMN9onGXVoryL+cyCIni3ySm+NSviKWz2dGigi+xPhMXY5SJYgn/Fb2MVxeoUPVmwZLWMZeZs15+Ukus2z24j/SWHmAKaSbV7uuVnMWV+Yfdli3t6A6HPZeYK0CpXaZew3hSkm5B3BGXLdw4RcO1IHiCIGMLkLXfJC+xi26OE77Am3ibPg96GvL8R9WWfnVOyFiSQGaMcj594hv3g9es/4ocTwO4lAAA=</value>
</data>
<data name="DefaultSchema" xml:space="preserve">
<value>dbo</value>

View File

@ -1,29 +0,0 @@
// <auto-generated />
namespace Hermes.Migrations
{
using System.CodeDom.Compiler;
using System.Data.Entity.Migrations;
using System.Data.Entity.Migrations.Infrastructure;
using System.Resources;
[GeneratedCode("EntityFramework.Migrations", "6.4.4")]
public sealed partial class V2 : IMigrationMetadata
{
private readonly ResourceManager Resources = new ResourceManager(typeof(V2));
string IMigrationMetadata.Id
{
get { return "202012292127194_V2"; }
}
string IMigrationMetadata.Source
{
get { return null; }
}
string IMigrationMetadata.Target
{
get { return Resources.GetString("Target"); }
}
}
}

View File

@ -1,60 +0,0 @@
namespace Hermes.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class V2 : DbMigration
{
public override void Up()
{
AddColumn("dbo.Preferences", "civiliteViewEnabled", c => c.Boolean(nullable: false));
AddColumn("dbo.Preferences", "nomViewEnabled", c => c.Boolean(nullable: false));
AddColumn("dbo.Preferences", "nomNaissanceViewEnabled", c => c.Boolean(nullable: false));
AddColumn("dbo.Preferences", "prenomViewEnabled", c => c.Boolean(nullable: false));
AddColumn("dbo.Preferences", "ageViewEnabled", c => c.Boolean(nullable: false));
AddColumn("dbo.Preferences", "professionViewEnabled", c => c.Boolean(nullable: false));
AddColumn("dbo.Preferences", "typeResidenceViewEnabled", c => c.Boolean(nullable: false));
AddColumn("dbo.Preferences", "mailViewEnabled", c => c.Boolean(nullable: false));
AddColumn("dbo.Preferences", "telViewEnabled", c => c.Boolean(nullable: false));
AddColumn("dbo.Preferences", "telPortViewEnabled", c => c.Boolean(nullable: false));
AddColumn("dbo.Preferences", "quartierViewEnabled", c => c.Boolean(nullable: false));
AddColumn("dbo.Preferences", "adresseViewEnabled", c => c.Boolean(nullable: false));
AddColumn("dbo.Preferences", "adresseBatimentViewEnabled", c => c.Boolean(nullable: false));
AddColumn("dbo.Preferences", "adresseNumeroBatimentViewEnabled", c => c.Boolean(nullable: false));
AddColumn("dbo.Preferences", "adresseExtViewEnabled", c => c.Boolean(nullable: false));
AddColumn("dbo.Preferences", "adresseExtCPViewEnabled", c => c.Boolean(nullable: false));
AddColumn("dbo.Preferences", "adresseExtVilleViewEnabled", c => c.Boolean(nullable: false));
AddColumn("dbo.Preferences", "dateCreationViewEnabled", c => c.Boolean(nullable: false));
AddColumn("dbo.Preferences", "dateModificationViewEnabled", c => c.Boolean(nullable: false));
AddColumn("dbo.Preferences", "windowHeight", c => c.Int(nullable: false));
AddColumn("dbo.Preferences", "windowWidth", c => c.Int(nullable: false));
AddColumn("dbo.Preferences", "windowMaximized", c => c.Boolean(nullable: false));
}
public override void Down()
{
DropColumn("dbo.Preferences", "windowMaximized");
DropColumn("dbo.Preferences", "windowWidth");
DropColumn("dbo.Preferences", "windowHeight");
DropColumn("dbo.Preferences", "dateModificationViewEnabled");
DropColumn("dbo.Preferences", "dateCreationViewEnabled");
DropColumn("dbo.Preferences", "adresseExtVilleViewEnabled");
DropColumn("dbo.Preferences", "adresseExtCPViewEnabled");
DropColumn("dbo.Preferences", "adresseExtViewEnabled");
DropColumn("dbo.Preferences", "adresseNumeroBatimentViewEnabled");
DropColumn("dbo.Preferences", "adresseBatimentViewEnabled");
DropColumn("dbo.Preferences", "adresseViewEnabled");
DropColumn("dbo.Preferences", "quartierViewEnabled");
DropColumn("dbo.Preferences", "telPortViewEnabled");
DropColumn("dbo.Preferences", "telViewEnabled");
DropColumn("dbo.Preferences", "mailViewEnabled");
DropColumn("dbo.Preferences", "typeResidenceViewEnabled");
DropColumn("dbo.Preferences", "professionViewEnabled");
DropColumn("dbo.Preferences", "ageViewEnabled");
DropColumn("dbo.Preferences", "prenomViewEnabled");
DropColumn("dbo.Preferences", "nomNaissanceViewEnabled");
DropColumn("dbo.Preferences", "nomViewEnabled");
DropColumn("dbo.Preferences", "civiliteViewEnabled");
}
}
}

View File

@ -1,126 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Target" xml:space="preserve">
<value>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</value>
</data>
<data name="DefaultSchema" xml:space="preserve">
<value>dbo</value>
</data>
</root>

View File

@ -3,8 +3,7 @@
namespace Hermes.Migrations {
internal sealed class Configuration : DbMigrationsConfiguration<Hermes.Model.ModelContext> {
public Configuration() {
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = true;
AutomaticMigrationsEnabled = false;
ContextKey = "Hermes";
}

View File

@ -20,7 +20,6 @@ namespace Hermes.Model {
private string _quartier;
private string _adresse;
private string _adresseBatiment;
private string _adresseNumeroBatiment;
private string _adresseExt;
private string _adresseExtCP;
private string _adresseExtVille;
@ -128,13 +127,6 @@ namespace Hermes.Model {
OnPropertyChanged();
}
}
public string AdresseNumeroBatiment {
get => _adresseNumeroBatiment;
set {
_adresseNumeroBatiment = value;
OnPropertyChanged();
}
}
public string AdresseExt {
get => TypeResidence == false ? null : _adresseExt;
set {
@ -302,7 +294,6 @@ namespace Hermes.Model {
citoyen.Quartier = Quartier;
citoyen.Adresse = Adresse;
citoyen.AdresseBatiment = AdresseBatiment;
citoyen.AdresseNumeroBatiment = AdresseNumeroBatiment;
citoyen.AdresseExt = AdresseExt;
citoyen.AdresseExtCP = AdresseExtCP;
citoyen.AdresseExtVille = AdresseExtVille;

View File

@ -11,82 +11,7 @@ namespace Hermes.Model {
public string Ville {
get; set;
}
public string ovhSmsServiceName {
get; set;
}
public string ovhSmsApplicationKey {
get; set;
}
public string ovhSmsApplicationSecret {
get; set;
}
public string ovhSmsConsumerKey {
get; set;
}
public bool civiliteViewEnabled {
get; set;
}
public bool nomViewEnabled {
get; set;
}
public bool nomNaissanceViewEnabled {
get; set;
}
public bool prenomViewEnabled {
get; set;
}
public bool ageViewEnabled {
get; set;
}
public bool professionViewEnabled {
get; set;
}
public bool typeResidenceViewEnabled {
get; set;
}
public bool mailViewEnabled {
get; set;
}
public bool telViewEnabled {
get; set;
}
public bool telPortViewEnabled {
get; set;
}
public bool quartierViewEnabled {
get; set;
}
public bool adresseViewEnabled {
get; set;
}
public bool adresseBatimentViewEnabled {
get; set;
}
public bool adresseNumeroBatimentViewEnabled {
get; set;
}
public bool adresseExtViewEnabled {
get; set;
}
public bool adresseExtCPViewEnabled {
get; set;
}
public bool adresseExtVilleViewEnabled {
get; set;
}
public bool dateCreationViewEnabled {
get; set;
}
public bool dateModificationViewEnabled {
get; set;
}
public int windowHeight {
get; set;
}
public int windowWidth {
get; set;
}
public bool windowMaximized {
public string SmsApiKey {
get; set;
}
}

View File

@ -1,19 +0,0 @@
namespace Hermes {
class OVHQueryBody {
public string charset {
get; set;
}
public string[] receivers {
get; set;
}
public string message {
get; set;
}
public string priority {
get; set;
}
public bool senderForResponse {
get; set;
}
}
}

View File

@ -1,16 +0,0 @@
namespace Hermes {
class OVHResponseBody {
public int totalCreditsRemoved {
get; set;
}
public string[] invalidReceivers {
get; set;
}
public string[] validReceivers {
get; set;
}
public int[] ids {
get; set;
}
}
}

View File

@ -5,14 +5,14 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Hermes"
mc:Ignorable="d"
Title="Options" Height="330" Width="300"
Title="Options" Height="250" Width="300"
ResizeMode="NoResize"
WindowStartupLocation="CenterOwner"
Closing="Window_Closing">
<Grid Background="WhiteSmoke">
<Grid.RowDefinitions>
<RowDefinition Height="160"/>
<RowDefinition Height="*"/>
<RowDefinition Height="50"/>
</Grid.RowDefinitions>
<TabControl Grid.Row="0" Margin="5,5,5,0">
<TabItem Header="Général">
@ -25,14 +25,8 @@
</TabItem>
<TabItem Header="Envoi de SMS">
<StackPanel Margin="5,5,5,5" VerticalAlignment="Top">
<Label>OVH ServiceName :</Label>
<TextBox Name="ovhSmsServiceNameTextBox" HorizontalAlignment="Left" VerticalContentAlignment="Center" Height="23" Width="250"/>
<Label>OVH ApplicationKey :</Label>
<TextBox Name="ovhSmsApplicationKeyTextBox" HorizontalAlignment="Left" VerticalContentAlignment="Center" Height="23" Width="250"/>
<Label>OVH ApplicationSecret :</Label>
<TextBox Name="ovhSmsApplicationSecretTextBox" HorizontalAlignment="Left" VerticalContentAlignment="Center" Height="23" Width="250"/>
<Label>OVH ConsumerKey :</Label>
<TextBox Name="ovhSmsConsumerKeyTextBox" HorizontalAlignment="Left" VerticalContentAlignment="Center" Height="23" Width="250"/>
<Label>Clé API ISendPro :</Label>
<TextBox Name="cleApiISendProTextBox" HorizontalAlignment="Left" VerticalContentAlignment="Center" Height="23" Width="250"/>
</StackPanel>
</TabItem>
</TabControl>

View File

@ -12,22 +12,18 @@ namespace Hermes {
Owner = parent;
dbContext = ModelContext.Getinstance();
Preferences pref = dbContext.Preferences.Local[0];
villeTextBox.Text = pref.Ville;
villeCPTextBox.Text = pref.VilleCP;
ovhSmsServiceNameTextBox.Text = pref.ovhSmsServiceName;
ovhSmsApplicationKeyTextBox.Text = pref.ovhSmsApplicationKey;
ovhSmsApplicationSecretTextBox.Text = pref.ovhSmsApplicationSecret;
ovhSmsConsumerKeyTextBox.Text = pref.ovhSmsConsumerKey;
if(dbContext.Preferences.Local.Count > 0) {
Preferences pref = dbContext.Preferences.Local[0];
villeTextBox.Text = pref.Ville;
villeCPTextBox.Text = pref.VilleCP;
cleApiISendProTextBox.Text = pref.SmsApiKey;
}
}
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) {
Preferences pref = dbContext.Preferences.Local[0];
if(string.IsNullOrWhiteSpace(pref.VilleCP) || string.IsNullOrWhiteSpace(pref.Ville)) {
if(dbContext.Preferences.Local.Count == 0) {
MessageBox.Show("La saisie d'information sur la commune est obligatoire.", "Saisie obligatoire", MessageBoxButton.OK, MessageBoxImage.Warning);
e.Cancel = true;
return;
}
}
@ -37,19 +33,28 @@ namespace Hermes {
return;
}
Preferences pref = dbContext.Preferences.Local[0];
pref.Ville = villeTextBox.Text;
pref.VilleCP = villeCPTextBox.Text;
pref.ovhSmsServiceName = ovhSmsServiceNameTextBox.Text;
pref.ovhSmsApplicationKey = ovhSmsApplicationKeyTextBox.Text;
pref.ovhSmsApplicationSecret = ovhSmsApplicationSecretTextBox.Text;
pref.ovhSmsConsumerKey = ovhSmsConsumerKeyTextBox.Text;
if(dbContext.Preferences.Local.Count == 0) {
Preferences pref = new Preferences();
pref.Ville = villeTextBox.Text;
pref.VilleCP = villeCPTextBox.Text;
pref.SmsApiKey = cleApiISendProTextBox.Text;
dbContext.Preferences.Add(pref);
} else {
Preferences pref = dbContext.Preferences.Local[0];
pref.Ville = villeTextBox.Text;
pref.VilleCP = villeCPTextBox.Text;
pref.SmsApiKey = cleApiISendProTextBox.Text;
}
dbContext.SaveChanges();
Close();
}
public void Annuler_Click(object sender, RoutedEventArgs e) {
if(dbContext.Preferences.Local.Count == 0) {
MessageBox.Show("La saisie d'information sur la commune est obligatoire.", "Saisie obligatoire", MessageBoxButton.OK, MessageBoxImage.Warning);
return;
}
Close();
}
}

View File

@ -51,6 +51,6 @@ using System.Windows;
// Vous pouvez spécifier toutes les valeurs ou indiquer les numéros de build et de révision par défaut
// en utilisant '*', comme indiqué ci-dessous :
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyVersion("0.9.1.0")]
[assembly: AssemblyFileVersion("0.9.1.0")]
[assembly: NeutralResourcesLanguage("fr-FR")]

View File

@ -26,7 +26,7 @@
<GridViewColumn Header="Nom" DisplayMemberBinding="{Binding Nom}" Width="120"/>
<GridViewColumn Header="Prénom" DisplayMemberBinding="{Binding Prenom}" Width="120"/>
<GridViewColumn Header="Mobile" DisplayMemberBinding="{Binding Mobile}" Width="120"/>
<GridViewColumn Header="Statut de l'envoi" DisplayMemberBinding="{Binding Status}" Width="280"/>
<GridViewColumn Header="Statut de l'envoi" DisplayMemberBinding="{Binding Status}" Width="290"/>
</GridView>
</ListView.View>
</ListView>

View File

@ -1,36 +1,18 @@
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.IO;
using System.Net;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows;
using System.Windows.Documents;
using System.Windows.Input;
namespace Hermes {
public partial class SmsWindow : Window {
private ObservableCollection<SmsSendingStatus> status = new ObservableCollection<SmsSendingStatus>();
private bool sending = false;
private static Regex telFrRgx = new Regex(@"^0\d{9}");
private static Regex telFrPrefixRgx = new Regex(@"^0");
public static string HashSHA1(string input) {
SHA1 sha = SHA1.Create();
byte[] bHash = sha.ComputeHash(Encoding.UTF8.GetBytes(input));
StringBuilder sBuilder = new StringBuilder();
for(int i = 0; i < bHash.Length; i++) {
sBuilder.Append(bHash[i].ToString("x2"));
}
return sBuilder.ToString();
}
public SmsWindow(Window parent, List<Citoyen> rcps) {
InitializeComponent();
@ -40,12 +22,7 @@ namespace Hermes {
SmsSendingStatus s = new SmsSendingStatus();
s.Nom = rcp.Nom;
s.Prenom = rcp.Prenom;
s.Mobile = rcp.TelPort.Replace(" ", "").Replace(".", "");
Match m = telFrRgx.Match(s.Mobile);
if(m.Success) {
// numéro FR (+33)
s.Mobile = telFrPrefixRgx.Replace(s.Mobile, "+33");
}
s.Mobile = rcp.TelPort.Replace(" ", "");
s.Status = "En attente";
status.Add(s);
}
@ -64,12 +41,10 @@ namespace Hermes {
ModelContext dbContext = ModelContext.Getinstance();
bool error = false;
string message = new TextRange(messageTextBox.Document.ContentStart, messageTextBox.Document.ContentEnd).Text;
Preferences pref = dbContext.Preferences.Local[0];
string apiKey = dbContext.Preferences.Local[0].SmsApiKey;
if(String.IsNullOrWhiteSpace(pref.ovhSmsServiceName) || String.IsNullOrWhiteSpace(pref.ovhSmsApplicationKey)
|| String.IsNullOrWhiteSpace(pref.ovhSmsApplicationSecret) || String.IsNullOrWhiteSpace(pref.ovhSmsConsumerKey)) {
MessageBox.Show("Erreur lors de la tentative d'envoi : Clés d'accès invalides.", "Envoi de SMS", MessageBoxButton.OK, MessageBoxImage.Error);
if(String.IsNullOrWhiteSpace(apiKey)) {
MessageBox.Show("Erreur lors de la tentative d'envoi : Clé ISendPro invalide.", "Envoi de SMS", MessageBoxButton.OK, MessageBoxImage.Error);
return;
}
@ -82,74 +57,46 @@ namespace Hermes {
annulerButton.IsEnabled = false;
messageTextBox.IsEnabled = false;
sending = true;
Cursor previousCursor = Mouse.OverrideCursor;
Mouse.OverrideCursor = Cursors.Wait;
string query = $"https://eu.api.ovh.com/1.0/sms/{pref.ovhSmsServiceName}/jobs";
ApiClient apiClient = new ApiClient();
SmsApi smsApi = new SmsApi(apiClient);
foreach(SmsSendingStatus stat in status) {
if(!stat.Status.Equals("Envoyé")) {
OVHQueryBody body = new OVHQueryBody();
body.charset = "UTF-8";
body.receivers = new string[] { stat.Mobile };
body.message = message;
body.priority = "high";
body.senderForResponse = true;
string bodyStr = JsonConvert.SerializeObject(body);
string ts = ((Int32) DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds).ToString();
string signature = "$1$" + HashSHA1(pref.ovhSmsApplicationSecret + "+" + pref.ovhSmsConsumerKey + "+" + "POST" + "+" + query + "+" + bodyStr + "+" + ts);
SmsUniqueRequest req = new SmsUniqueRequest();
req.Keyid = apiKey;
req.Sms = message;
req.Smslong = "999";
req.Num = stat.Mobile;
try {
HttpWebRequest req = (HttpWebRequest) HttpWebRequest.Create(query);
req.Method = "POST";
req.ContentType = "application/json";
req.Headers.Add("X-Ovh-Application:" + pref.ovhSmsApplicationKey);
req.Headers.Add("X-Ovh-Consumer:" + pref.ovhSmsConsumerKey);
req.Headers.Add("X-Ovh-Signature:" + signature);
req.Headers.Add("X-Ovh-Timestamp:" + ts);
using(System.IO.Stream s = req.GetRequestStream()) {
using(System.IO.StreamWriter sw = new System.IO.StreamWriter(s)) {
sw.Write(bodyStr);
}
}
HttpWebResponse resp = (HttpWebResponse) req.GetResponse();
using(var stream = resp.GetResponseStream()) {
var reader = new StreamReader(stream);
OVHResponseBody rb = JsonConvert.DeserializeObject<OVHResponseBody>(reader.ReadToEnd().Trim());
if(rb.validReceivers.Length > 0 && rb.validReceivers[0] != null && rb.validReceivers[0].Equals(stat.Mobile)) {
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 = "Numéro de mobile invalide";
stat.Status = eta.Message;
}
} else {
error = true;
stat.Status = "Erreur technique";
}
resp.Close();
} catch(WebException ex) {
} catch(ApiException ex) {
error = true;
WebResponse resp = ex.Response;
if(resp == null) {
string errorMsg = ex.Message == null ? "" : ex.Message;
stat.Status = $"Erreur de transmission : {errorMsg}";
continue;
}
try {
using(var stream = resp.GetResponseStream()) {
StreamReader reader = new StreamReader(stream);
String result = reader.ReadToEnd().Trim();
stat.Status = result;
SMSReponse resp = JsonConvert.DeserializeObject<SMSReponse>((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;
}
} catch(Exception) {
stat.Status = $"Erreur de transmission";
} else {
error = true;
stat.Status = "Erreur technique";
}
} catch(Exception ex) {
error = true;
string errorMsg = ex.Message == null ? "" : ex.Message;
stat.Status = $"Erreur de transmission : {errorMsg}";
}
}
}
@ -158,10 +105,9 @@ namespace Hermes {
annulerButton.IsEnabled = true;
messageTextBox.IsEnabled = true;
sending = false;
Mouse.OverrideCursor = previousCursor;
if(error) {
MessageBox.Show("Plusieurs envois se sont mal déroulés. Certains numéros de téléphone ne sont peut-être pas valides.", "Envoi de SMS", MessageBoxButton.OK, MessageBoxImage.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);
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

View File

@ -2,9 +2,10 @@
<packages>
<package id="EntityFramework" version="6.4.4" targetFramework="net48" />
<package id="EntityFramework.SqlServerCompact" version="6.4.4" targetFramework="net48" />
<package id="Microsoft.Office.Interop.Excel" version="15.0.4795.1000" targetFramework="net48" />
<package id="iSendProSMS" version="1.1.3" targetFramework="net48" />
<package id="Microsoft.Office.Interop.Outlook" version="15.0.4797.1003" targetFramework="net48" />
<package id="Microsoft.Office.Interop.Word" version="15.0.4797.1003" targetFramework="net48" />
<package id="Microsoft.SqlServer.Compact" version="4.0.8876.1" targetFramework="net48" />
<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net48" />
<package id="RestSharp.Net2" version="1.1.11" targetFramework="net48" />
</packages>