2020-11-30 00:19:37 +01:00
using Hermes.Model ;
using System ;
using System.Data.Entity ;
2020-09-07 22:24:37 +02:00
using System.Collections.Generic ;
using System.Windows ;
using System.Windows.Input ;
2020-12-01 21:57:15 +01:00
using System.Windows.Data ;
2020-12-04 23:29:56 +01:00
using System.IO ;
using System.Text ;
using Microsoft.Win32 ;
2020-09-07 22:24:37 +02:00
2020-11-30 00:19:37 +01:00
namespace Hermes {
public partial class MainWindow : Window {
private ModelContext dbContext = null ;
2020-09-07 22:24:37 +02:00
private CitoyenModal citoyenModal = new CitoyenModal ( ) ;
2020-11-30 00:19:37 +01:00
private PreferencesModal preferencesModal = new PreferencesModal ( ) ;
2020-12-01 21:57:15 +01:00
private CollectionViewSource citoyenCollectionViewSource = null ;
2020-12-01 22:06:27 +01:00
private bool isEnabledFilter = false ;
2020-11-30 00:19:37 +01:00
public MainWindow ( ) {
dbContext = ModelContext . Getinstance ( ) ;
//dbContext.Database.Log = log => System.Console.WriteLine(log);
dbContext . Database . CreateIfNotExists ( ) ;
2020-09-07 22:24:37 +02:00
InitializeComponent ( ) ;
}
2020-11-30 00:19:37 +01:00
private void Window_Loaded ( object sender , RoutedEventArgs e ) {
citoyenModal . Owner = this ;
preferencesModal . Owner = this ;
dbContext . CitoyenSet . Load ( ) ;
dbContext . Preferences . Load ( ) ;
2020-12-01 21:57:15 +01:00
citoyenCollectionViewSource = ( CollectionViewSource ) this . FindResource ( "citoyenCollectionViewSource" ) ;
citoyenCollectionViewSource . Source = dbContext . CitoyenSet . Local ;
2020-12-04 23:29:56 +01:00
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 ) ;
preferencesModal . LoadPreferences ( ) ;
preferencesModal . ShowDialog ( ) ;
}
2020-11-30 00:19:37 +01:00
}
private void Options_Click ( object sender , RoutedEventArgs e ) {
2020-12-04 23:29:56 +01:00
preferencesModal . LoadPreferences ( ) ;
2020-11-30 00:19:37 +01:00
preferencesModal . ShowDialog ( ) ;
}
private void Ajouter_Click ( object sender , RoutedEventArgs e ) {
citoyenModal . EnableCreateMode ( ) ;
2020-09-07 22:24:37 +02:00
citoyenModal . ShowDialog ( ) ;
}
2020-11-30 00:19:37 +01:00
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 ) ;
if ( result = = MessageBoxResult . Yes ) {
List < Citoyen > clist = new List < Citoyen > ( ) ;
foreach ( Citoyen c in dgCitoyens . SelectedItems ) {
clist . Add ( c ) ;
}
foreach ( Citoyen c in clist ) {
dbContext . CitoyenSet . Remove ( c ) ;
}
dbContext . SaveChanges ( ) ;
}
} else {
MessageBox . Show ( "Aucun citoyen sélectionné" , "Suppression" , MessageBoxButton . OK , MessageBoxImage . Exclamation ) ;
}
}
2020-12-04 23:29:56 +01:00
private void Courriel_Click ( object sender , RoutedEventArgs e ) {
if ( dgCitoyens . SelectedItems . Count > 0 ) {
MessageBoxResult result = MessageBox . Show ( "Voulez-vous envoyer un courriel à ces citoyens ?" , "Envoi de courriel" , MessageBoxButton . YesNo , MessageBoxImage . Question ) ;
if ( result = = MessageBoxResult . Yes ) {
List < string > mails = new List < string > ( ) ;
foreach ( Citoyen citoyen in dgCitoyens . SelectedItems ) {
if ( ! String . IsNullOrWhiteSpace ( citoyen . Mail ) ) {
mails . Add ( citoyen . Mail ) ;
}
}
if ( mails . Count > 0 ) {
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 ) ;
foreach ( string mail in mails ) {
Microsoft . Office . Interop . Outlook . Recipient rcp = mailItem . Recipients . Add ( mail ) ;
rcp . Type = ( int ) Microsoft . Office . Interop . Outlook . OlMailRecipientType . olBCC ;
}
mailItem . Recipients . ResolveAll ( ) ;
MessageBox . Show ( "Assurez-vous que Microsoft OutLook soit démarré avant de continuer" , "Envoi de courriel" , MessageBoxButton . OK , MessageBoxImage . None ) ;
mailItem . Display ( true ) ;
} else {
MessageBox . Show ( "Aucun des citoyens sélectionnés ne disposent d'une adresse E-Mail" , "Envoi de courriel" , MessageBoxButton . OK , MessageBoxImage . Exclamation ) ;
}
}
} else {
MessageBox . Show ( "Aucun citoyen sélectionné" , "Suppression" , MessageBoxButton . OK , MessageBoxImage . Exclamation ) ;
}
}
private void Publipostage_Click ( object sender , RoutedEventArgs e ) {
if ( dgCitoyens . SelectedItems . Count > 0 ) {
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\";\"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 ) {
string civilite = citoyen . Civilite = = null ? "" : citoyen . Civilite ;
string nom = citoyen . Nom = = null ? "" : citoyen . Nom ;
string nomNaissance = citoyen . NomNaissance = = null ? "" : citoyen . NomNaissance ;
string prenom = citoyen . Prenom = = null ? "" : citoyen . Prenom ;
string profession = citoyen . Profession = = null ? "" : citoyen . Profession ;
string typeResidence = citoyen . TypeResidenceLabel = = null ? "" : citoyen . TypeResidenceLabel ;
string mail = citoyen . Mail = = null ? "" : citoyen . Mail ;
string tel = citoyen . Tel = = null ? "" : citoyen . Tel ;
string telPort = citoyen . TelPort = = null ? "" : citoyen . TelPort ;
string quartier = citoyen . Quartier = = null ? "" : citoyen . Quartier ;
string batiment = citoyen . AdresseBatiment = = null ? "" : citoyen . AdresseBatiment ;
string adressePrincipale = citoyen . AdressePrincipale = = null ? "" : citoyen . AdressePrincipale ;
string cpPrincipal = citoyen . AdressePrincipaleCP = = null ? "" : citoyen . AdressePrincipaleCP ;
string villePrincipale = citoyen . AdressePrincipaleVille = = null ? "" : citoyen . AdressePrincipaleVille ;
string adresseSecondaire = citoyen . AdresseSecondaire = = null ? "" : citoyen . AdresseSecondaire ;
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}\";\"{adressePrincipale}\";\"{cpPrincipal}\";\"{villePrincipale}\";\"{adresseSecondaire}\";\"{cpSecondaire}\";\"{villeSecondaire}\"" ) ;
File . WriteAllText ( csvPath , sb . ToString ( ) , Encoding . GetEncoding ( "ISO-8859-1" ) ) ;
}
OpenFileDialog ofd = new OpenFileDialog ( ) ;
ofd . Filter = "Document World|*.doc;*.docx;*.dotx|Tous les ficiers|*.*" ;
if ( ofd . ShowDialog ( ) = = true ) {
Microsoft . Office . Interop . Word . Application app = new Microsoft . Office . Interop . Word . Application ( ) ;
Microsoft . Office . Interop . Word . Document doc = app . Documents . Open ( ofd . FileName ) ;
doc . MailMerge . OpenDataSource ( csvPath , false , false , true ) ;
app . Visible = true ;
}
}
} else {
MessageBox . Show ( "Aucun citoyen sélectionné" , "Publipostage" , MessageBoxButton . OK , MessageBoxImage . Exclamation ) ;
}
}
2020-11-30 00:19:37 +01:00
private void DgCitoyen_DoubleClick ( object sender , MouseButtonEventArgs e ) {
if ( dgCitoyens . SelectedItem ! = null ) {
citoyenModal . EnableEditMode ( ( Citoyen ) dgCitoyens . SelectedItem ) ;
citoyenModal . ShowDialog ( ) ;
}
2020-09-07 22:24:37 +02:00
}
2020-12-01 21:57:15 +01:00
private void Rechercher_Click ( object sender , RoutedEventArgs e ) {
2020-12-01 22:06:27 +01:00
if ( isEnabledFilter ) {
citoyenCollectionViewSource . View . Refresh ( ) ;
} else {
citoyenCollectionViewSource . Filter + = new FilterEventHandler ( CitoyenFilter ) ;
isEnabledFilter = true ;
}
2020-12-01 21:57:15 +01:00
}
2020-12-05 02:12:23 +01:00
private void Quitter_Click ( object sender , RoutedEventArgs e ) {
Close ( ) ;
}
2020-12-01 21:57:15 +01:00
private void Reinitialiser_Click ( object sender , RoutedEventArgs e ) {
2020-12-01 22:06:27 +01:00
if ( isEnabledFilter ) {
citoyenCollectionViewSource . Filter - = new FilterEventHandler ( CitoyenFilter ) ;
isEnabledFilter = false ;
}
2020-12-02 23:27:43 +01:00
ageOperationFilterComboBox . SelectedIndex = 0 ;
ageFilterTextBox . Text = null ;
professionFilterTextBox . Text = null ;
quartierFilterTextBox . Text = null ;
adresseFilterTextBox . Text = null ;
residenceFilterComboBox . SelectedIndex = 0 ;
2020-12-01 21:57:15 +01:00
}
2020-11-30 00:19:37 +01:00
protected override void OnClosed ( EventArgs e ) {
dbContext . Dispose ( ) ;
2020-09-07 22:24:37 +02:00
base . OnClosed ( e ) ;
Application . Current . Shutdown ( ) ;
}
2020-12-01 21:57:15 +01:00
private void CitoyenFilter ( object sender , FilterEventArgs e ) {
Citoyen citoyen = ( Citoyen ) e . Item ;
e . Accepted = true ;
if ( citoyen ! = null ) {
2020-12-02 23:27:43 +01:00
if ( ! String . IsNullOrEmpty ( professionFilterTextBox . Text ) ) {
if ( citoyen . Profession = = null | | ! citoyen . Profession . ToLower ( ) . Contains ( professionFilterTextBox . Text . ToLower ( ) ) ) {
2020-12-01 21:57:15 +01:00
e . Accepted = false ;
2020-12-02 23:27:43 +01:00
return ;
2020-12-01 21:57:15 +01:00
}
}
2020-12-02 23:27:43 +01:00
try {
int ageFilter = Int32 . Parse ( ageFilterTextBox . Text ) ;
if ( ! citoyen . AgeInt . HasValue
| | ( ageOperationFilterComboBox . SelectedIndex = = 0 & & ageFilter ! = citoyen . AgeInt )
| | ( ageOperationFilterComboBox . SelectedIndex = = 1 & & ageFilter > = citoyen . AgeInt )
| | ( ageOperationFilterComboBox . SelectedIndex = = 2 & & ageFilter < = citoyen . AgeInt ) ) {
e . Accepted = false ;
return ;
}
} catch ( Exception ) { }
if ( ! String . IsNullOrEmpty ( quartierFilterTextBox . Text ) ) {
if ( citoyen . Quartier = = null | | ! citoyen . Quartier . ToLower ( ) . Contains ( quartierFilterTextBox . Text . ToLower ( ) ) ) {
e . Accepted = false ;
return ;
}
}
string addrBat = citoyen . AdresseBatiment = = null ? "" : citoyen . AdresseBatiment ;
2020-12-03 23:49:45 +01:00
string addr = $"{citoyen.Adresse} {addrBat}" . ToLower ( ) ;
2020-12-02 23:27:43 +01:00
if ( ! String . IsNullOrEmpty ( adresseFilterTextBox . Text ) ) {
if ( ! addr . Contains ( adresseFilterTextBox . Text . ToLower ( ) ) ) {
e . Accepted = false ;
return ;
}
}
if ( ( residenceFilterComboBox . SelectedIndex = = 1 & & citoyen . TypeResidence ! = false )
| | ( residenceFilterComboBox . SelectedIndex = = 2 & & citoyen . TypeResidence ! = true ) ) {
e . Accepted = false ;
return ;
}
2020-12-01 21:57:15 +01:00
}
}
2020-09-07 22:24:37 +02:00
}
}