Hermes/ImportWindow.xaml.cs

140 lines
5.9 KiB
C#
Raw Normal View History

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);
}
}
}