5 Commits
0.9.1 ... 0.9.2

25 changed files with 781 additions and 247 deletions

View File

@ -37,15 +37,7 @@
<Label>Nom de naissance :</Label> <Label>Nom de naissance :</Label>
<TextBox Name="nomNaissanceTextBox" Text="{Binding Path=NomNaissance}" HorizontalAlignment="Left" VerticalContentAlignment="Center" Height="23" Width="150"/> <TextBox Name="nomNaissanceTextBox" Text="{Binding Path=NomNaissance}" HorizontalAlignment="Left" VerticalContentAlignment="Center" Height="23" Width="150"/>
<Label>Prénom :</Label> <Label>Prénom :</Label>
<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 Name="prenomTextBox" Text="{Binding Path=Prenom}" 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> <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 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> <TextBox.Text>
@ -69,17 +61,11 @@
<GroupBox Header="Adresse Locale" Margin="10,10,0,0" VerticalAlignment="Top"> <GroupBox Header="Adresse Locale" Margin="10,10,0,0" VerticalAlignment="Top">
<StackPanel> <StackPanel>
<Label>Numéro et rue :</Label> <Label>Numéro et rue :</Label>
<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 Name="adresseTextBox" Text="{Binding Path=Adresse}" 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> <Label>Bâtiment :</Label>
<TextBox Name="adresseBatimentTextBox" Text="{Binding Path=AdresseBatiment}" HorizontalAlignment="Left" VerticalContentAlignment="Center" Height="23" Width="150"/> <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> <Label>Quartier :</Label>
<TextBox Name="quartierTextBox" Text="{Binding Path=Quartier}" HorizontalAlignment="Left" VerticalContentAlignment="Center" Height="23" Width="150"/> <TextBox Name="quartierTextBox" Text="{Binding Path=Quartier}" HorizontalAlignment="Left" VerticalContentAlignment="Center" Height="23" Width="150"/>
</StackPanel> </StackPanel>

View File

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

View File

@ -65,8 +65,9 @@
<Reference Include="EntityFramework.SqlServerCompact, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"> <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> <HintPath>packages\EntityFramework.SqlServerCompact.6.4.4\lib\net45\EntityFramework.SqlServerCompact.dll</HintPath>
</Reference> </Reference>
<Reference Include="isendpro, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Microsoft.Office.Interop.Excel, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
<HintPath>packages\iSendProSMS.1.1.3\lib\isendpro.dll</HintPath> <HintPath>packages\Microsoft.Office.Interop.Excel.15.0.4795.1000\lib\net20\Microsoft.Office.Interop.Excel.dll</HintPath>
<EmbedInteropTypes>True</EmbedInteropTypes>
</Reference> </Reference>
<Reference Include="Microsoft.Office.Interop.Outlook, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL"> <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> <HintPath>packages\Microsoft.Office.Interop.Outlook.15.0.4797.1003\lib\net20\Microsoft.Office.Interop.Outlook.dll</HintPath>
@ -79,9 +80,6 @@
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <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> <HintPath>packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference> </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" />
<Reference Include="System.ComponentModel.DataAnnotations" /> <Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.Data" /> <Reference Include="System.Data" />
@ -110,17 +108,26 @@
<SubType>Designer</SubType> <SubType>Designer</SubType>
</ApplicationDefinition> </ApplicationDefinition>
<Compile Include="Converter\NegateBoolean.cs" /> <Compile Include="Converter\NegateBoolean.cs" />
<Compile Include="ImportWindow.xaml.cs">
<DependentUpon>ImportWindow.xaml</DependentUpon>
</Compile>
<Compile Include="InputWindow.xaml.cs"> <Compile Include="InputWindow.xaml.cs">
<DependentUpon>InputWindow.xaml</DependentUpon> <DependentUpon>InputWindow.xaml</DependentUpon>
</Compile> </Compile>
<Compile Include="Migrations\202012051414539_V1.cs" /> <Compile Include="Migrations\202012281505590_V1.cs" />
<Compile Include="Migrations\202012051414539_V1.designer.cs"> <Compile Include="Migrations\202012281505590_V1.designer.cs">
<DependentUpon>202012051414539_V1.cs</DependentUpon> <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> </Compile>
<Compile Include="Migrations\Configuration.cs" /> <Compile Include="Migrations\Configuration.cs" />
<Compile Include="Model\Citoyen.cs" /> <Compile Include="Model\Citoyen.cs" />
<Compile Include="Model\Preferences.cs" /> <Compile Include="Model\Preferences.cs" />
<Compile Include="Model\ModelContext.cs" /> <Compile Include="Model\ModelContext.cs" />
<Compile Include="OVHQueryBody.cs" />
<Compile Include="OVHResponseBody.cs" />
<Compile Include="PreferencesWindow.xaml.cs"> <Compile Include="PreferencesWindow.xaml.cs">
<DependentUpon>PreferencesWindow.xaml</DependentUpon> <DependentUpon>PreferencesWindow.xaml</DependentUpon>
</Compile> </Compile>
@ -134,6 +141,10 @@
<SubType>Designer</SubType> <SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
</Page> </Page>
<Page Include="ImportWindow.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="InputWindow.xaml"> <Page Include="InputWindow.xaml">
<SubType>Designer</SubType> <SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
@ -176,8 +187,11 @@
<DependentUpon>Settings.settings</DependentUpon> <DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput> <DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile> </Compile>
<EmbeddedResource Include="Migrations\202012051414539_V1.resx"> <EmbeddedResource Include="Migrations\202012281505590_V1.resx">
<DependentUpon>202012051414539_V1.cs</DependentUpon> <DependentUpon>202012281505590_V1.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Migrations\202012292127194_V2.resx">
<DependentUpon>202012292127194_V2.cs</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx"> <EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator> <Generator>ResXFileCodeGenerator</Generator>
@ -211,6 +225,9 @@
<ItemGroup> <ItemGroup>
<Resource Include="hermes.ico" /> <Resource Include="hermes.ico" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<SplashScreen Include="hermes_splash.png" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup> <PropertyGroup>

33
ImportWindow.xaml Normal file
View File

@ -0,0 +1,33 @@
<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>

139
ImportWindow.xaml.cs Normal file
View File

@ -0,0 +1,139 @@
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,30 +99,12 @@
} }
"Entry" "Entry"
{ {
"MsmKey" = "8:_A0F83BCCDBA77804851DAAE18F54AC65"
"OwnerKey" = "8:_C4AD2B19587A5D3179211CF729B66A33"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_A0F83BCCDBA77804851DAAE18F54AC65"
"OwnerKey" = "8:_EDA497A114444E23814EEE023731C727"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_A3A39C8B97A947A09D3B1660AC88FF5E" "MsmKey" = "8:_A3A39C8B97A947A09D3B1660AC88FF5E"
"OwnerKey" = "8:_UNDEFINED" "OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED"
} }
"Entry" "Entry"
{ {
"MsmKey" = "8:_C4AD2B19587A5D3179211CF729B66A33"
"OwnerKey" = "8:_EDA497A114444E23814EEE023731C727"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_C767BE5A43214C2C9E31CD47DB92AA96" "MsmKey" = "8:_C767BE5A43214C2C9E31CD47DB92AA96"
"OwnerKey" = "8:_UNDEFINED" "OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED"
@ -166,37 +148,13 @@
"Entry" "Entry"
{ {
"MsmKey" = "8:_F434633E0B073F068C7E19B9E5AB2EC4" "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" "OwnerKey" = "8:_EDA497A114444E23814EEE023731C727"
"MsmSig" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED"
} }
"Entry" "Entry"
{ {
"MsmKey" = "8:_UNDEFINED" "MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_C4AD2B19587A5D3179211CF729B66A33" "OwnerKey" = "8:_EDA497A114444E23814EEE023731C727"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_A0F83BCCDBA77804851DAAE18F54AC65"
"MsmSig" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED"
} }
"Entry" "Entry"
@ -287,7 +245,7 @@
"InstallerBootstrapper" = "3:2" "InstallerBootstrapper" = "3:2"
"BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}" "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}"
{ {
"Enabled" = "11:TRUE" "Enabled" = "11:FALSE"
"PromptEnabled" = "11:TRUE" "PromptEnabled" = "11:TRUE"
"PrerequisitesLocation" = "2:1" "PrerequisitesLocation" = "2:1"
"Url" = "8:" "Url" = "8:"
@ -603,37 +561,6 @@
"IsDependency" = "11:FALSE" "IsDependency" = "11:FALSE"
"IsolateTo" = "8:" "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" "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A3A39C8B97A947A09D3B1660AC88FF5E"
{ {
"SourcePath" = "8:..\\bin\\Release\\amd64\\sqlcecompact40.dll" "SourcePath" = "8:..\\bin\\Release\\amd64\\sqlcecompact40.dll"
@ -654,37 +581,6 @@
"IsDependency" = "11:FALSE" "IsDependency" = "11:FALSE"
"IsolateTo" = "8:" "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" "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C767BE5A43214C2C9E31CD47DB92AA96"
{ {
"SourcePath" = "8:..\\bin\\Release\\amd64\\sqlceqp40.dll" "SourcePath" = "8:..\\bin\\Release\\amd64\\sqlceqp40.dll"
@ -916,15 +812,15 @@
{ {
"Name" = "8:Microsoft Visual Studio" "Name" = "8:Microsoft Visual Studio"
"ProductName" = "8:Hermes" "ProductName" = "8:Hermes"
"ProductCode" = "8:{D2CA66FB-020C-41EF-BD0D-991FFC306669}" "ProductCode" = "8:{CE173D1C-E589-4D0D-8443-272C16A0ECB7}"
"PackageCode" = "8:{89CBF16D-49D3-4DE5-9CEE-4CE55ADD05AE}" "PackageCode" = "8:{9F1DEC0D-1EB8-4407-884C-414E205F16ED}"
"UpgradeCode" = "8:{A8FB75F3-57A5-4B7D-A0AE-9E87F69529B0}" "UpgradeCode" = "8:{A8FB75F3-57A5-4B7D-A0AE-9E87F69529B0}"
"AspNetVersion" = "8:2.0.50727.0" "AspNetVersion" = "8:2.0.50727.0"
"RestartWWWService" = "11:FALSE" "RestartWWWService" = "11:FALSE"
"RemovePreviousVersions" = "11:TRUE" "RemovePreviousVersions" = "11:TRUE"
"DetectNewerInstalledVersion" = "11:TRUE" "DetectNewerInstalledVersion" = "11:TRUE"
"InstallAllUsers" = "11:FALSE" "InstallAllUsers" = "11:FALSE"
"ProductVersion" = "8:0.9.1" "ProductVersion" = "8:0.9.2"
"Manufacturer" = "8:Aztrom" "Manufacturer" = "8:Aztrom"
"ARPHELPTELEPHONE" = "8:" "ARPHELPTELEPHONE" = "8:"
"ARPHELPLINK" = "8:" "ARPHELPLINK" = "8:"
@ -1466,7 +1362,7 @@
{ {
"{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_EDA497A114444E23814EEE023731C727" "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_EDA497A114444E23814EEE023731C727"
{ {
"SourcePath" = "8:..\\obj\\Debug\\Hermes.exe" "SourcePath" = "8:..\\obj\\Release\\Hermes.exe"
"TargetName" = "8:" "TargetName" = "8:"
"Tag" = "8:" "Tag" = "8:"
"Folder" = "8:_358759A83B6F4CD5AEAA9CCDB02A52A0" "Folder" = "8:_358759A83B6F4CD5AEAA9CCDB02A52A0"

View File

@ -7,7 +7,7 @@
mc:Ignorable="d" mc:Ignorable="d"
Loaded="Window_Loaded" Loaded="Window_Loaded"
WindowStartupLocation="CenterScreen" WindowStartupLocation="CenterScreen"
Title="Hermes" Height="640" Width="1024"> Title="Hermes" MinHeight="360" MinWidth="1010">
<Window.Resources> <Window.Resources>
<BooleanToVisibilityConverter x:Key="Bool2VisibilityConv"/> <BooleanToVisibilityConverter x:Key="Bool2VisibilityConv"/>
<CollectionViewSource x:Key="citoyenCollectionViewSource"/> <CollectionViewSource x:Key="citoyenCollectionViewSource"/>
@ -20,35 +20,38 @@
</Grid.RowDefinitions> </Grid.RowDefinitions>
<Menu Grid.Row="0" Background="White"> <Menu Grid.Row="0" Background="White">
<MenuItem Header="Fichier"> <MenuItem Header="Fichier">
<MenuItem Header="Importer" Click="Importer_Click" />
<MenuItem Header="Quitter" Click="Quitter_Click"/> <MenuItem Header="Quitter" Click="Quitter_Click"/>
</MenuItem> </MenuItem>
<MenuItem Header="Édition"> <MenuItem Header="Édition">
<MenuItem Header="Ajouter..." Click="Ajouter_Click"/> <MenuItem Header="Ajouter..." Click="Ajouter_Click"/>
<MenuItem Header="Édition groupée"> <MenuItem Header="Édition multiple">
<MenuItem Header="Adresse" Click="GroupEdit_Adresse"/>
<MenuItem Header="Quartier" Click="GroupEdit_Quartier"/> <MenuItem Header="Quartier" Click="GroupEdit_Quartier"/>
<MenuItem Header="Bâtiment" Click="GroupEdit_Batiment"/> <MenuItem Header="Bâtiment" Click="GroupEdit_Batiment"/>
</MenuItem> </MenuItem>
<MenuItem Header="Supprimer" Click="Supprimer_Click"/> <MenuItem Header="Supprimer" Click="Supprimer_Click"/>
</MenuItem> </MenuItem>
<MenuItem Header="Affichage"> <MenuItem Name="viewMenu" Header="Affichage">
<MenuItem Name="civiliteViewCheckBox" Header="Civilité" IsCheckable="true"/> <MenuItem Name="civiliteViewCheckBox" Header="Civilité" IsCheckable="true" IsChecked="{Binding Path=civiliteViewEnabled}"/>
<MenuItem Name="nomViewCheckBox" Header="Nom" IsCheckable="true" IsChecked="True"/> <MenuItem Name="nomViewCheckBox" Header="Nom" IsCheckable="true" IsChecked="{Binding Path=nomViewEnabled}"/>
<MenuItem Name="nomNaissanceViewCheckBox" Header="Nom de naissance" IsCheckable="true"/> <MenuItem Name="nomNaissanceViewCheckBox" Header="Nom de naissance" IsCheckable="true" IsChecked="{Binding Path=nomNaissanceViewEnabled}"/>
<MenuItem Name="prenomViewCheckBox" Header="Prénom" IsCheckable="true" IsChecked="True"/> <MenuItem Name="prenomViewCheckBox" Header="Prénom" IsCheckable="true" IsChecked="{Binding Path=prenomViewEnabled}"/>
<MenuItem Name="ageViewCheckBox" Header="Age" IsCheckable="true" IsChecked="True"/> <MenuItem Name="ageViewCheckBox" Header="Age" IsCheckable="true" IsChecked="{Binding Path=ageViewEnabled}"/>
<MenuItem Name="professionViewCheckBox" Header="Profession" IsCheckable="true"/> <MenuItem Name="professionViewCheckBox" Header="Profession" IsCheckable="true" IsChecked="{Binding Path=professionViewEnabled}"/>
<MenuItem Name="typeResidenceViewCheckBox" Header="Résidence" IsCheckable="true" IsChecked="True"/> <MenuItem Name="typeResidenceViewCheckBox" Header="Résidence" IsCheckable="true" IsChecked="{Binding Path=typeResidenceViewEnabled}"/>
<MenuItem Name="quartierViewCheckBox" Header="Quartier" IsCheckable="true"/> <MenuItem Name="quartierViewCheckBox" Header="Quartier" IsCheckable="true" IsChecked="{Binding Path=quartierViewEnabled}"/>
<MenuItem Name="adresseViewCheckBox" Header="Adresse locale" IsCheckable="true" IsChecked="True"/> <MenuItem Name="adresseViewCheckBox" Header="Adresse locale" IsCheckable="true" IsChecked="{Binding Path=adresseViewEnabled}"/>
<MenuItem Name="adresseBatimentViewCheckBox" Header="Bâtiment" IsCheckable="true"/> <MenuItem Name="adresseBatimentViewCheckBox" Header="Bâtiment" IsCheckable="true" IsChecked="{Binding Path=adresseBatimentViewEnabled}"/>
<MenuItem Name="adresseExtViewCheckBox" Header="Adresse" IsCheckable="true"/> <MenuItem Name="adresseNumeroBatimentViewCheckBox" Header="Numéro d'appartement" IsCheckable="true" IsChecked="{Binding Path=adresseNumeroBatimentViewEnabled}"/>
<MenuItem Name="adresseExtCPViewCheckBox" Header="Code postal" IsCheckable="true"/> <MenuItem Name="adresseExtViewCheckBox" Header="Adresse" IsCheckable="true" IsChecked="{Binding Path=adresseExtViewEnabled}"/>
<MenuItem Name="adresseExtVilleViewCheckBox" Header="Ville" IsCheckable="true"/> <MenuItem Name="adresseExtCPViewCheckBox" Header="Code postal" IsCheckable="true" IsChecked="{Binding Path=adresseExtCPViewEnabled}"/>
<MenuItem Name="mailViewCheckBox" Header="E-Mail" IsCheckable="true"/> <MenuItem Name="adresseExtVilleViewCheckBox" Header="Ville" IsCheckable="true" IsChecked="{Binding Path=adresseExtVilleViewEnabled}"/>
<MenuItem Name="telViewCheckBox" Header="Téléphone" IsCheckable="true"/> <MenuItem Name="mailViewCheckBox" Header="E-Mail" IsCheckable="true" IsChecked="{Binding Path=mailViewEnabled}"/>
<MenuItem Name="telPortViewCheckBox" Header="Mobile" IsCheckable="true"/> <MenuItem Name="telViewCheckBox" Header="Téléphone" IsCheckable="true" IsChecked="{Binding Path=telViewEnabled}"/>
<MenuItem Name="dateCreationViewCheckBox" Header="Date de création" IsCheckable="true"/> <MenuItem Name="telPortViewCheckBox" Header="Mobile" IsCheckable="true" IsChecked="{Binding Path=telPortViewEnabled}"/>
<MenuItem Name="dateModificationViewCheckBox" Header="Date de modification" IsCheckable="true"/> <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> </MenuItem>
<MenuItem Header="Communication"> <MenuItem Header="Communication">
<MenuItem Header="Courriel..." Click="Courriel_Click"/> <MenuItem Header="Courriel..." Click="Courriel_Click"/>
@ -110,6 +113,7 @@
<DataGridTextColumn Header="Quartier" Visibility="{Binding Source={x:Reference quartierViewCheckBox}, Path=IsChecked, Converter={StaticResource Bool2VisibilityConv}}" Binding="{Binding Quartier}" Width="*"/> <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="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="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="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="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="*"/> <DataGridTextColumn Header="Ville" Visibility="{Binding Source={x:Reference adresseExtVilleViewCheckBox}, Path=IsChecked, Converter={StaticResource Bool2VisibilityConv}}" Binding="{Binding AdresseExtVille}" Width="*"/>

View File

@ -14,22 +14,63 @@ namespace Hermes {
private ModelContext dbContext = null; private ModelContext dbContext = null;
private CollectionViewSource citoyenCollectionViewSource = null; private CollectionViewSource citoyenCollectionViewSource = null;
private bool isEnabledFilter = false; private bool isEnabledFilter = false;
private Preferences pref = null;
public MainWindow() { public MainWindow() {
dbContext = ModelContext.Getinstance(); dbContext = ModelContext.Getinstance();
//dbContext.Database.Log = log => System.Console.WriteLine(log); //dbContext.Database.Log = log => System.Console.WriteLine(log);
dbContext.Database.CreateIfNotExists(); 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(); 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) { private void Window_Loaded(object sender, RoutedEventArgs e) {
dbContext.CitoyenSet.Load();
dbContext.Preferences.Load();
citoyenCollectionViewSource = (CollectionViewSource) this.FindResource("citoyenCollectionViewSource"); citoyenCollectionViewSource = (CollectionViewSource) this.FindResource("citoyenCollectionViewSource");
citoyenCollectionViewSource.Source = dbContext.CitoyenSet.Local; citoyenCollectionViewSource.Source = dbContext.CitoyenSet.Local;
if(dbContext.Preferences.Local.Count == 0) { if(string.IsNullOrWhiteSpace(pref.VilleCP) || string.IsNullOrWhiteSpace(pref.Ville)) {
MessageBox.Show("Il s'agit du premier lancement de Hermes. Veuillez renseigner les informations sur votre commune.", "Premier lancement", MessageBoxButton.OK, MessageBoxImage.None); 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 preferencesWindow = new PreferencesWindow(this);
preferencesWindow.ShowDialog(); preferencesWindow.ShowDialog();
@ -48,7 +89,7 @@ namespace Hermes {
private void GroupEdit_Batiment(object sender, RoutedEventArgs e) { private void GroupEdit_Batiment(object sender, RoutedEventArgs e) {
if(dgCitoyens.SelectedItems.Count == 0) { if(dgCitoyens.SelectedItems.Count == 0) {
MessageBox.Show("Aucun citoyen sélectionné.", "Édition groupée", MessageBoxButton.OK, MessageBoxImage.Exclamation); MessageBox.Show("Aucun citoyen sélectionné.", "Édition multiple", MessageBoxButton.OK, MessageBoxImage.Exclamation);
return; return;
} }
@ -64,7 +105,7 @@ namespace Hermes {
private void GroupEdit_Quartier(object sender, RoutedEventArgs e) { private void GroupEdit_Quartier(object sender, RoutedEventArgs e) {
if(dgCitoyens.SelectedItems.Count == 0) { if(dgCitoyens.SelectedItems.Count == 0) {
MessageBox.Show("Aucun citoyen sélectionné.", "Édition groupée", MessageBoxButton.OK, MessageBoxImage.Exclamation); MessageBox.Show("Aucun citoyen sélectionné.", "Édition multiple", MessageBoxButton.OK, MessageBoxImage.Exclamation);
return; return;
} }
@ -78,6 +119,22 @@ 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) { private void Supprimer_Click(object sender, RoutedEventArgs e) {
if(dgCitoyens.SelectedItems.Count > 0) { if(dgCitoyens.SelectedItems.Count > 0) {
MessageBoxResult result = MessageBox.Show("Voulez-vous supprimer ces citoyens ?", "Suppression", MessageBoxButton.YesNo, MessageBoxImage.Question); MessageBoxResult result = MessageBox.Show("Voulez-vous supprimer ces citoyens ?", "Suppression", MessageBoxButton.YesNo, MessageBoxImage.Question);
@ -111,7 +168,10 @@ namespace Hermes {
} }
if(rcps.Count > 0) { if(rcps.Count > 0) {
if(noTel) { 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); 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;
}
} }
SmsWindow smsWindow = new SmsWindow(this, rcps); SmsWindow smsWindow = new SmsWindow(this, rcps);
smsWindow.ShowDialog(); smsWindow.ShowDialog();
@ -140,7 +200,10 @@ namespace Hermes {
} }
if(mails.Count > 0) { if(mails.Count > 0) {
if(noMail) { if(noMail) {
MessageBox.Show("Certains des citoyens sélectionnés ne disposent pas d'une adresse E-Mail.", "Envoi de courriel", MessageBoxButton.OK, MessageBoxImage.Exclamation); 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;
}
} }
Microsoft.Office.Interop.Outlook.Application app = new Microsoft.Office.Interop.Outlook.Application(); 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); Microsoft.Office.Interop.Outlook.MailItem mailItem = app.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem);
@ -165,7 +228,7 @@ namespace Hermes {
MessageBoxResult result = MessageBox.Show("Voulez-vous réaliser une tâche de publipostage pour ces citoyens ?", "Publipostage", MessageBoxButton.YesNo, MessageBoxImage.Question); 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) { if(result == MessageBoxResult.Yes) {
string csvPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "hermes_tmp_datasource.csv"); 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\";\"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\";\"Numéro appartement\";\"Adresse locale\";\"Code postal local\";\"Ville locale\";\"Adresse principale\";\"Code postal principal\";\"Ville principale\";\"Adresse secondaire\";\"Code postal secondaire\";\"Ville secondaire\"";
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.AppendLine(csvHeader); sb.AppendLine(csvHeader);
foreach(Citoyen citoyen in dgCitoyens.SelectedItems) { foreach(Citoyen citoyen in dgCitoyens.SelectedItems) {
@ -180,6 +243,10 @@ namespace Hermes {
string telPort = citoyen.TelPort == null ? "" : citoyen.TelPort; string telPort = citoyen.TelPort == null ? "" : citoyen.TelPort;
string quartier = citoyen.Quartier == null ? "" : citoyen.Quartier; string quartier = citoyen.Quartier == null ? "" : citoyen.Quartier;
string batiment = citoyen.AdresseBatiment == null ? "" : citoyen.AdresseBatiment; 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 adressePrincipale = citoyen.AdressePrincipale == null ? "" : citoyen.AdressePrincipale;
string cpPrincipal = citoyen.AdressePrincipaleCP == null ? "" : citoyen.AdressePrincipaleCP; string cpPrincipal = citoyen.AdressePrincipaleCP == null ? "" : citoyen.AdressePrincipaleCP;
string villePrincipale = citoyen.AdressePrincipaleVille == null ? "" : citoyen.AdressePrincipaleVille; string villePrincipale = citoyen.AdressePrincipaleVille == null ? "" : citoyen.AdressePrincipaleVille;
@ -187,7 +254,7 @@ namespace Hermes {
string cpSecondaire = citoyen.AdresseSecondaireCP == null ? "" : citoyen.AdresseSecondaireCP; string cpSecondaire = citoyen.AdresseSecondaireCP == null ? "" : citoyen.AdresseSecondaireCP;
string villeSecondaire = citoyen.AdresseSecondaireVille == null ? "" : citoyen.AdresseSecondaireVille; string villeSecondaire = citoyen.AdresseSecondaireVille == null ? "" : citoyen.AdresseSecondaireVille;
sb.AppendLine($"\"{civilite}\";\"{nom}\";\"{nomNaissance}\";\"{prenom}\";\"{profession}\";\"{typeResidence}\";\"{mail}\";\"{tel}\";\"{telPort}\";\"{quartier}\";\"{batiment}\";\"{adressePrincipale}\";\"{cpPrincipal}\";\"{villePrincipale}\";\"{adresseSecondaire}\";\"{cpSecondaire}\";\"{villeSecondaire}\""); sb.AppendLine($"\"{civilite}\";\"{nom}\";\"{nomNaissance}\";\"{prenom}\";\"{profession}\";\"{typeResidence}\";\"{mail}\";\"{tel}\";\"{telPort}\";\"{quartier}\";\"{batiment}\";\"{numeroBatiment}\";\"{adresseLocale}\";\"{cpLocal}\";{villeLocale};\"{adressePrincipale}\";\"{cpPrincipal}\";\"{villePrincipale}\";\"{adresseSecondaire}\";\"{cpSecondaire}\";\"{villeSecondaire}\"");
File.WriteAllText(csvPath, sb.ToString(), Encoding.GetEncoding("ISO-8859-1")); File.WriteAllText(csvPath, sb.ToString(), Encoding.GetEncoding("ISO-8859-1"));
} }
@ -207,6 +274,15 @@ namespace Hermes {
} }
} }
private void Importer_Click(object sender, RoutedEventArgs e) {
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Classeur Excel|*.xls;*.xlsx;*.xlsm|Tous les ficiers|*.*";
if(ofd.ShowDialog() == true) {
ImportWindow importWindow = new ImportWindow(this, ofd.FileName);
importWindow.ShowDialog();
}
}
private void DgCitoyen_DoubleClick(object sender, MouseButtonEventArgs e) { private void DgCitoyen_DoubleClick(object sender, MouseButtonEventArgs e) {
if(dgCitoyens.SelectedItem != null) { if(dgCitoyens.SelectedItem != null) {
CitoyenWindow citoyenWindow = new CitoyenWindow(this, (Citoyen) dgCitoyens.SelectedItem); CitoyenWindow citoyenWindow = new CitoyenWindow(this, (Citoyen) dgCitoyens.SelectedItem);
@ -241,6 +317,14 @@ namespace Hermes {
} }
protected override void OnClosed(EventArgs e) { 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(); dbContext.Dispose();
base.OnClosed(e); base.OnClosed(e);
Application.Current.Shutdown(); Application.Current.Shutdown();
@ -275,10 +359,12 @@ namespace Hermes {
} }
} }
string addrBat = citoyen.AdresseBatiment == null ? "" : citoyen.AdresseBatiment;
string addr = $"{citoyen.Adresse} {addrBat}".ToLower();
if(!String.IsNullOrEmpty(adresseFilterTextBox.Text)) { if(!String.IsNullOrEmpty(adresseFilterTextBox.Text)) {
if(!addr.Contains(adresseFilterTextBox.Text.ToLower())) { 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())) {
e.Accepted = false; e.Accepted = false;
return; return;
} }

View File

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

View File

@ -25,6 +25,7 @@
Quartier = c.String(maxLength: 4000), Quartier = c.String(maxLength: 4000),
Adresse = c.String(maxLength: 4000), Adresse = c.String(maxLength: 4000),
AdresseBatiment = c.String(maxLength: 4000), AdresseBatiment = c.String(maxLength: 4000),
AdresseNumeroBatiment = c.String(maxLength: 4000),
AdresseExt = c.String(maxLength: 4000), AdresseExt = c.String(maxLength: 4000),
AdresseExtCP = c.String(maxLength: 4000), AdresseExtCP = c.String(maxLength: 4000),
AdresseExtVille = c.String(maxLength: 4000), AdresseExtVille = c.String(maxLength: 4000),
@ -40,7 +41,10 @@
Id = c.Int(nullable: false, identity: true), Id = c.Int(nullable: false, identity: true),
VilleCP = c.String(maxLength: 4000), VilleCP = c.String(maxLength: 4000),
Ville = c.String(maxLength: 4000), Ville = c.String(maxLength: 4000),
SmsApiKey = c.String(maxLength: 4000), ovhSmsServiceName = c.String(maxLength: 4000),
ovhSmsApplicationKey = c.String(maxLength: 4000),
ovhSmsApplicationSecret = c.String(maxLength: 4000),
ovhSmsConsumerKey = c.String(maxLength: 4000),
}) })
.PrimaryKey(t => t.Id); .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> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<data name="Target" xml:space="preserve"> <data name="Target" xml:space="preserve">
<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> <value>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</value>
</data> </data>
<data name="DefaultSchema" xml:space="preserve"> <data name="DefaultSchema" xml:space="preserve">
<value>dbo</value> <value>dbo</value>

View File

@ -0,0 +1,29 @@
// <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

@ -0,0 +1,60 @@
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

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

View File

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

View File

@ -11,7 +11,82 @@ namespace Hermes.Model {
public string Ville { public string Ville {
get; set; get; set;
} }
public string SmsApiKey { 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 {
get; set; get; set;
} }
} }

19
OVHQueryBody.cs Normal file
View File

@ -0,0 +1,19 @@
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;
}
}
}

16
OVHResponseBody.cs Normal file
View File

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

View File

@ -12,18 +12,22 @@ namespace Hermes {
Owner = parent; Owner = parent;
dbContext = ModelContext.Getinstance(); dbContext = ModelContext.Getinstance();
if(dbContext.Preferences.Local.Count > 0) { Preferences pref = dbContext.Preferences.Local[0];
Preferences pref = dbContext.Preferences.Local[0]; villeTextBox.Text = pref.Ville;
villeTextBox.Text = pref.Ville; villeCPTextBox.Text = pref.VilleCP;
villeCPTextBox.Text = pref.VilleCP;
cleApiISendProTextBox.Text = pref.SmsApiKey; ovhSmsServiceNameTextBox.Text = pref.ovhSmsServiceName;
} ovhSmsApplicationKeyTextBox.Text = pref.ovhSmsApplicationKey;
ovhSmsApplicationSecretTextBox.Text = pref.ovhSmsApplicationSecret;
ovhSmsConsumerKeyTextBox.Text = pref.ovhSmsConsumerKey;
} }
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) {
if(dbContext.Preferences.Local.Count == 0) { Preferences pref = dbContext.Preferences.Local[0];
if(string.IsNullOrWhiteSpace(pref.VilleCP) || string.IsNullOrWhiteSpace(pref.Ville)) {
MessageBox.Show("La saisie d'information sur la commune est obligatoire.", "Saisie obligatoire", MessageBoxButton.OK, MessageBoxImage.Warning); MessageBox.Show("La saisie d'information sur la commune est obligatoire.", "Saisie obligatoire", MessageBoxButton.OK, MessageBoxImage.Warning);
e.Cancel = true; e.Cancel = true;
return;
} }
} }
@ -33,28 +37,19 @@ namespace Hermes {
return; return;
} }
if(dbContext.Preferences.Local.Count == 0) { Preferences pref = dbContext.Preferences.Local[0];
Preferences pref = new Preferences(); pref.Ville = villeTextBox.Text;
pref.Ville = villeTextBox.Text; pref.VilleCP = villeCPTextBox.Text;
pref.VilleCP = villeCPTextBox.Text; pref.ovhSmsServiceName = ovhSmsServiceNameTextBox.Text;
pref.SmsApiKey = cleApiISendProTextBox.Text; pref.ovhSmsApplicationKey = ovhSmsApplicationKeyTextBox.Text;
dbContext.Preferences.Add(pref); pref.ovhSmsApplicationSecret = ovhSmsApplicationSecretTextBox.Text;
} else { pref.ovhSmsConsumerKey = ovhSmsConsumerKeyTextBox.Text;
Preferences pref = dbContext.Preferences.Local[0];
pref.Ville = villeTextBox.Text;
pref.VilleCP = villeCPTextBox.Text;
pref.SmsApiKey = cleApiISendProTextBox.Text;
}
dbContext.SaveChanges(); dbContext.SaveChanges();
Close(); Close();
} }
public void Annuler_Click(object sender, RoutedEventArgs e) { 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(); 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 // 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 : // en utilisant '*', comme indiqué ci-dessous :
// [assembly: AssemblyVersion("1.0.*")] // [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("0.9.1.0")] [assembly: AssemblyVersion("0.9.2.0")]
[assembly: AssemblyFileVersion("0.9.1.0")] [assembly: AssemblyFileVersion("0.9.2.0")]
[assembly: NeutralResourcesLanguage("fr-FR")] [assembly: NeutralResourcesLanguage("fr-FR")]

View File

@ -1,11 +1,13 @@
using Hermes.Model; using Hermes.Model;
using IO.Swagger.Api;
using IO.Swagger.Client;
using IO.Swagger.Model;
using Newtonsoft.Json; using Newtonsoft.Json;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.ObjectModel; 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;
using System.Windows.Documents; using System.Windows.Documents;
@ -13,6 +15,21 @@ namespace Hermes {
public partial class SmsWindow : Window { public partial class SmsWindow : Window {
private ObservableCollection<SmsSendingStatus> status = new ObservableCollection<SmsSendingStatus>(); private ObservableCollection<SmsSendingStatus> status = new ObservableCollection<SmsSendingStatus>();
private bool sending = false; 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) { public SmsWindow(Window parent, List<Citoyen> rcps) {
InitializeComponent(); InitializeComponent();
@ -22,7 +39,12 @@ namespace Hermes {
SmsSendingStatus s = new SmsSendingStatus(); SmsSendingStatus s = new SmsSendingStatus();
s.Nom = rcp.Nom; s.Nom = rcp.Nom;
s.Prenom = rcp.Prenom; s.Prenom = rcp.Prenom;
s.Mobile = rcp.TelPort.Replace(" ", ""); 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.Status = "En attente"; s.Status = "En attente";
status.Add(s); status.Add(s);
} }
@ -41,10 +63,12 @@ namespace Hermes {
ModelContext dbContext = ModelContext.Getinstance(); ModelContext dbContext = ModelContext.Getinstance();
bool error = false; bool error = false;
string message = new TextRange(messageTextBox.Document.ContentStart, messageTextBox.Document.ContentEnd).Text; string message = new TextRange(messageTextBox.Document.ContentStart, messageTextBox.Document.ContentEnd).Text;
string apiKey = dbContext.Preferences.Local[0].SmsApiKey; Preferences pref = dbContext.Preferences.Local[0];
if(String.IsNullOrWhiteSpace(apiKey)) {
MessageBox.Show("Erreur lors de la tentative d'envoi : Clé ISendPro invalide.", "Envoi de SMS", MessageBoxButton.OK, MessageBoxImage.Error); 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);
return; return;
} }
@ -58,44 +82,57 @@ namespace Hermes {
messageTextBox.IsEnabled = false; messageTextBox.IsEnabled = false;
sending = true; sending = true;
ApiClient apiClient = new ApiClient();
SmsApi smsApi = new SmsApi(apiClient); string query = $"https://eu.api.ovh.com/1.0/sms/{pref.ovhSmsServiceName}/jobs";
foreach(SmsSendingStatus stat in status) { foreach(SmsSendingStatus stat in status) {
if(!stat.Status.Equals("Envoyé")) { if(!stat.Status.Equals("Envoyé")) {
SmsUniqueRequest req = new SmsUniqueRequest(); OVHQueryBody body = new OVHQueryBody();
req.Keyid = apiKey; body.charset = "UTF-8";
req.Sms = message; body.receivers = new string[] { stat.Mobile };
req.Smslong = "999"; body.message = message;
req.Num = stat.Mobile; body.priority = "high";
try { body.senderForResponse = true;
SMSReponse resp = smsApi.SendSms(req);
if(resp != null && resp.Etat != null && resp.Etat.Etat != null && resp.Etat.Etat.Count > 0) { string bodyStr = JsonConvert.SerializeObject(body);
SMSReponseEtatEtat eta = resp.Etat.Etat[0];
if(eta.Code != null && eta.Code == 0 && eta.Tel != null) { string ts = ((Int32) DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds).ToString();
stat.Status = "Envoyé"; string signature = "$1$" + HashSHA1(pref.ovhSmsApplicationSecret + "+" + pref.ovhSmsConsumerKey + "+" + "POST" + "+" + query + "+" + bodyStr + "+" + ts);
} else {
error = true; HttpWebRequest req = (HttpWebRequest) HttpWebRequest.Create(query);
stat.Status = eta.Message; req.Method = "POST";
} req.ContentType = "application/json";
} else { req.Headers.Add("X-Ovh-Application:" + pref.ovhSmsApplicationKey);
error = true; req.Headers.Add("X-Ovh-Consumer:" + pref.ovhSmsConsumerKey);
stat.Status = "Erreur technique"; 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);
} }
} catch(ApiException ex) { }
error = true;
SMSReponse resp = JsonConvert.DeserializeObject<SMSReponse>((String) ex.ErrorContent); try {
if(resp != null && resp.Etat != null && resp.Etat.Etat != null && resp.Etat.Etat.Count > 0) { HttpWebResponse resp = (HttpWebResponse) req.GetResponse();
SMSReponseEtatEtat eta = resp.Etat.Etat[0]; using(var stream = resp.GetResponseStream()) {
if(eta.Code != null && eta.Code == 0 && eta.Tel != null) { 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)) {
stat.Status = "Envoyé"; stat.Status = "Envoyé";
} else { } else {
error = true; error = true;
stat.Status = eta.Message; stat.Status = "Numéro de mobile invalide";
} }
} else { }
error = true; resp.Close();
stat.Status = "Erreur technique"; } catch(WebException ex) {
error = true;
WebResponse resp = ex.Response;
using(var stream = resp.GetResponseStream()) {
var reader = new StreamReader(stream);
String result = reader.ReadToEnd().Trim();
stat.Status = result;
} }
} }
} }

BIN
hermes_splash.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

View File

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