using DatenDB; using System; using System.Collections.Generic; using System.Collections.Specialized; using System.ComponentModel; using System.Configuration; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace Deckungsbeitrag { public partial class FormImport : Form { public Umsatz umsatz = new Umsatz(); public Kunde kunde = new Kunde(); public Kosten kosten; string filename; string row; string[] rows; int[] fails = new int[0]; int index = 0; int fehler = 0; int itemimported = 0; int umsatzsaved = 0; int kostensaved = 0; int itemtoimport = 0; int itemnotimported = 0; int kontonr = 0; int[] variabel = ConfigurationManager.AppSettings["Variabel"].Split(',').Select(int.Parse).ToArray(); int[] fixlohn = ConfigurationManager.AppSettings["FixLohn"].Split(',').Select(int.Parse).ToArray(); int[] fixmiet = ConfigurationManager.AppSettings["FixMiete"].Split(',').Select(int.Parse).ToArray(); Thread t; public FormImport() { InitializeComponent(); toolStripOpen.Visible = false; dTPUmsatz.Enabled = false; dTPUmsatz.Value = DateTime.Now.AddMonths(-1); buttonImport.Enabled = false; buttonImport.BackColor = Color.Gray; checkBoxExtra.Visible = checkBoxExtra.Enabled = false; } private void toolStripOpen_Click(object sender, EventArgs e) { OpenFileDialog dialog = new OpenFileDialog(); dialog.Filter = "CommaSeparatedFiles|*.txt;*.csv"; dialog.InitialDirectory = "C:"; if (dialog.ShowDialog() == DialogResult.OK) { filename = dialog.FileName; DatenLesen(); } if (this.listViewImport.Items.Count > 0) { buttonImport.Enabled = true; buttonImport.BackColor = Color.PaleGreen; } } private void DatenLesen() { StreamReader sr = new StreamReader(filename, Encoding.GetEncoding("iso-8859-1")); row = string.Empty; rows = new string[0]; int idx = 0; while (!sr.EndOfStream) { Array.Resize(ref rows, ++idx); row = sr.ReadLine(); rows[idx - 1] = row; } sr.Close(); for (int i = 0; i < rows.Length; i++) { string[] rowData = rows[i].Split(';'); if(i == 0) { ColumnHeader ch = new ColumnHeader(); foreach (string s in rowData) { ch = new ColumnHeader(); if (s.Contains("Wert")) { if (s.Contains("Wert01")) ch.Name = ch.Text = "Jän " + dTPUmsatz.Value.Year.ToString(); if (s.Contains("Wert02")) ch.Name = ch.Text = "Feb " + dTPUmsatz.Value.Year.ToString(); if (s.Contains("Wert03")) ch.Name = ch.Text = "Mär " + dTPUmsatz.Value.Year.ToString(); if (s.Contains("Wert04")) ch.Name = ch.Text = "Apr " + dTPUmsatz.Value.Year.ToString(); if (s.Contains("Wert05")) ch.Name = ch.Text = "Mai " + dTPUmsatz.Value.Year.ToString(); if (s.Contains("Wert06")) ch.Name = ch.Text = "Jun " + dTPUmsatz.Value.Year.ToString(); if (s.Contains("Wert07")) ch.Name = ch.Text = "Jul " + dTPUmsatz.Value.Year.ToString(); if (s.Contains("Wert08")) ch.Name = ch.Text = "Aug " + dTPUmsatz.Value.Year.ToString(); if (s.Contains("Wert09")) ch.Name = ch.Text = "Sep " + dTPUmsatz.Value.Year.ToString(); if (s.Contains("Wert10")) ch.Name = ch.Text = "Okt " + dTPUmsatz.Value.Year.ToString(); if (s.Contains("Wert11")) ch.Name = ch.Text = "Nov " + dTPUmsatz.Value.Year.ToString(); if (s.Contains("Wert12")) ch.Name = ch.Text = "Dez " + dTPUmsatz.Value.Year.ToString(); } else ch.Name = ch.Text = s.Trim(); this.listViewImport.Columns.Add(ch); }//UMSCHREIBEN DER COLUMNHEADER VON WERT AUF MONATE } else { ListViewItem item = new ListViewItem(); item.UseItemStyleForSubItems = false; item.Text = rowData[0]; for (int j = 1; j < rowData.Length; j++) { item.SubItems.Add(rowData[j]); } this.listViewImport.Items.Add(item); } //BEFÜLLEN DER COLUMNS DER LISTVIEW } this.listViewImport.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent); ListView.ColumnHeaderCollection cc = listViewImport.Columns; for (int i = 0; i < cc.Count; i++) { int colWidth = TextRenderer.MeasureText(cc[i].Text, listViewImport.Font).Width + 10; if (colWidth > cc[i].Width) { cc[i].Width = colWidth; } } //COLUMNS BREITE CONTENT ODER HEADER SIZE this.listViewImport.AllowColumnReorder = true; if (!rBKundenDaten.Checked) { this.listViewImport.CheckBoxes = true; }//CHECKBOXES BEI KOSTENLISTE UND UMSATZLISTE AKTIVIERT NUR BEI FEHLERHAFT NICHT IMPORTIERTEN VERWENDET }//AUSGEWÄHLTE LISTE WIRD IN DIE LISTVIEW GELESEN. private void buttonImport_Click(object sender, EventArgs e) { //t = new Thread(new ThreadStart(Splash)); //t.Start(); this.Cursor = Cursors.WaitCursor; if (rBKundenDaten.Checked) { fehler = 0; int kundensaved = 0; string vorkunde = null; int items = 0; List kndvorimp = new List(); kndvorimp = Kunde.GetList(true, string.Empty); StringCollection kndimport = new StringCollection(); foreach(ListViewItem item in this.listViewImport.Items) { ++items; if (item.Text != "0000001") { if (int.TryParse(item.Text, out int tmp)) { if (vorkunde == item.Text) { ++fehler; vorkunde = item.Text; } else { if (!item.SubItems[5].Text.Contains("Preisgruppe")) { if (kunde.CheckKndNr(item.Text) == 0) { this.kunde.TourID = null; this.kunde.KundeNummer = vorkunde = item.Text; this.kunde.KundeGruppe = string.IsNullOrEmpty(item.SubItems[3].Text) ? string.Empty : item.SubItems[3].Text; this.kunde.PLZ = int.TryParse(item.SubItems[4].Text, out int tmp2) ? tmp2 : 00; this.kunde.KundeName = string.IsNullOrEmpty(item.SubItems[5].Text) ? string.Empty : item.SubItems[5].Text; this.kunde.KundeName2 = string.IsNullOrEmpty(item.SubItems[6].Text) ? string.Empty : item.SubItems[6].Text; this.kunde.Strasse = string.IsNullOrEmpty(item.SubItems[8].Text) ? string.Empty : item.SubItems[8].Text; this.kunde.Land = string.IsNullOrEmpty(item.SubItems[9].Text) ? string.Empty : item.SubItems[9].Text; this.kunde.Ort = string.IsNullOrEmpty(item.SubItems[10].Text) ? string.Empty : item.SubItems[10].Text; this.kunde.Bettenanzahl = int.TryParse(item.SubItems[45].Text, out int tmp3) ? tmp3 : 00; this.kunde.Waescheart = string.IsNullOrEmpty(item.SubItems[46].Text) ? string.Empty : item.SubItems[46].Text; this.kunde.Service = string.IsNullOrEmpty(item.SubItems[47].Text) ? string.Empty : item.SubItems[47].Text; this.kunde.Region = string.IsNullOrEmpty(item.SubItems[48].Text) ? string.Empty : item.SubItems[48].Text; this.kunde.Suchtext = string.IsNullOrEmpty(item.SubItems[55].Text) ? string.Empty : item.SubItems[55].Text; this.kunde.Aktiv = item.SubItems[56].Text == "1" ? true : false; this.kunde.KundeID = null; if (this.kunde.Save() == 1) ++kundensaved; else { Array.Resize(ref fails, ++index); fails[index - 1] = items; } } else { this.kunde.TourID = null; this.kunde.KundeNummer = vorkunde = item.Text; this.kunde.KundeGruppe = string.IsNullOrEmpty(item.SubItems[3].Text) ? string.Empty : item.SubItems[3].Text; this.kunde.PLZ = int.TryParse(item.SubItems[4].Text, out int tmp2) ? tmp2 : 00; this.kunde.KundeName = string.IsNullOrEmpty(item.SubItems[5].Text) ? string.Empty : item.SubItems[5].Text; this.kunde.KundeName2 = string.IsNullOrEmpty(item.SubItems[6].Text) ? string.Empty : item.SubItems[6].Text; this.kunde.Strasse = string.IsNullOrEmpty(item.SubItems[8].Text) ? string.Empty : item.SubItems[8].Text; this.kunde.Land = string.IsNullOrEmpty(item.SubItems[9].Text) ? string.Empty : item.SubItems[9].Text; this.kunde.Ort = string.IsNullOrEmpty(item.SubItems[10].Text) ? string.Empty : item.SubItems[10].Text; this.kunde.Bettenanzahl = int.TryParse(item.SubItems[45].Text, out int tmp3) ? tmp3 : 00; this.kunde.Waescheart = string.IsNullOrEmpty(item.SubItems[46].Text) ? string.Empty : item.SubItems[46].Text; this.kunde.Service = string.IsNullOrEmpty(item.SubItems[47].Text) ? string.Empty : item.SubItems[47].Text; this.kunde.Region = string.IsNullOrEmpty(item.SubItems[48].Text) ? string.Empty : item.SubItems[48].Text; this.kunde.Suchtext = string.IsNullOrEmpty(item.SubItems[55].Text) ? string.Empty : item.SubItems[55].Text; this.kunde.KundeID = Kunde.GetKundeID(item.Text, null); this.kunde.Aktiv = item.SubItems[56].Text == "1" ? true : false; if (this.kunde.Save() == 1) ++kundensaved; else { Array.Resize(ref fails, ++index); fails[index - 1] = items; } //kndimport.Add(this.kunde.KundeNummer); Kunde kun = kndvorimp.SingleOrDefault(x => x.KundeNummer == this.kunde.KundeNummer); kndvorimp.Remove(kun); } } else ++fehler; } } else { MessageBox.Show($"Zeile {items} nicht importiert! KundenNr. ist keine Zahl."); ++fehler; } } else ++fehler; } if (checkBoxMandat.Checked) { foreach (Kunde knd in kndvorimp) { knd.Aktiv = false; knd.Save(); } } //t.Abort(); if (items == kundensaved + fehler) { MessageBox.Show("Import Fertig!"); } else { string show; string[] shows = new string[0]; int idx = 0; foreach (int i in fails) { Array.Resize(ref shows, ++idx); show = i.ToString(); shows[idx - 1] = show; } string mssgbx = string.Join(Environment.NewLine, shows); MessageBox.Show("Import nicht vollständig!" + Environment.NewLine + $"Folgende Datensätze wurden nicht importiert: {mssgbx}"); } }//IMPORT VON KUNDENDATENLISTE AUS SOCOM if (rBKostenListe.Checked) { itemimported = 0; kostensaved = 0; foreach (ListViewItem item in this.listViewImport.Items) { kosten = new Kosten(); if (int.TryParse(item.SubItems[1].Text, out kontonr)) { this.kosten.KontoNr = kontonr; if (Array.Exists(variabel, x => x == kontonr)) this.kosten.Kategorie = KostenKat.Variabel; else { if (Array.Exists(fixlohn, x => x == kontonr)) this.kosten.Kategorie = KostenKat.FixLohn; else { if (Array.Exists(fixmiet, x => x == kontonr)) this.kosten.Kategorie = KostenKat.FixMiete; else this.kosten.Kategorie = KostenKat.Rest; } } this.kosten.Bezeichnung = item.SubItems[2].Text; foreach (ColumnHeader ch in this.listViewImport.Columns) { if (DateTime.TryParse(ch.Text, out DateTime datum)) { if (datum.Year != 0001) { this.kosten.Datum = datum; this.kosten.KostenID = kosten.GetKostenID(kosten.KontoNr, datum); if (double.Parse(item.SubItems[ch.Index].Text, System.Globalization.NumberStyles.Any) != 0) { ++itemimported; this.kosten.Betrag = double.Parse(item.SubItems[ch.Index].Text, System.Globalization.NumberStyles.Any); if (kosten.Save() == 1) ++kostensaved; } } } } } } //t.Abort(); if (kostensaved == itemimported) { MessageBox.Show("Import Fertig! Alle Zeilen importiert."); } else MessageBox.Show("Import Fertig!"); }//IMPORT VON KOSTENLISTE VON STEUERBERATER if (rBUmsatzListe.Checked) { itemnotimported = 0; itemimported = 0; itemtoimport = 0; string monat = string.Empty; foreach (ListViewItem item in this.listViewImport.Items) { ++itemtoimport; this.umsatz.UmsatzID = null; if (kunde.CheckKndNr(item.SubItems[0].Text) != 0) { this.umsatz.KundeID = kunde.CheckKndNr(item.SubItems[0].Text); foreach (ColumnHeader ch in this.listViewImport.Columns) { if (DateTime.TryParse(ch.Text, out DateTime datum)) { this.umsatz.Datum = datum; this.umsatz.Betrag = double.Parse(item.SubItems[ch.Index].Text); this.umsatz.UmsatzID = umsatz.GetUmsatzID(umsatz.KundeID, datum); if (umsatz.Save() == 1) ++itemimported; else { item.Checked = true; ++itemnotimported; } } } } else { item.Checked = true; ++itemnotimported; } } //t.Abort(); if (itemimported / 12 + itemnotimported == itemtoimport) { MessageBox.Show($"Import Fertig! {itemnotimported} Zeilen wurden nicht importiert."); foreach(ListViewItem item in this.listViewImport.Items) { if(item.Checked == false) this.listViewImport.Items.Remove(item); } } else MessageBox.Show($"Irgendwas ist falsch gelaufen... {itemtoimport} != {itemimported / 12}+{itemnotimported}!!"); }//IMPORT VON UMSATZLISTE AUS SOCOM if (checkBoxExtra.Checked) { foreach(ListViewItem item in this.listViewImport.Items) { ++itemimported; if (kunde.CheckKndNr(item.Text) != 0) { this.umsatz.UmsatzID = null; this.umsatz.KundeID = kunde.CheckKndNr(item.Text); this.umsatz.Datum = DateTime.Parse(item.SubItems[1].Text); this.umsatz.Betrag = double.Parse(item.SubItems[2].Text); if (umsatz.Save() == 1) ++umsatzsaved; } else ++fehler; } if (umsatzsaved + fehler == itemimported) { MessageBox.Show("Import Fertig!"); //ConfigurationManager.AppSettings["LetzterImport"].Replace(ConfigurationManager.AppSettings["LetzterImport"], DateTime.Today.ToString()); } }//COLUMNHEADER BEARBEITBAR PROGRAMMIEREN UM FLEXIBEL IMPORTIEREN ZU KÖNNEN?? this.Cursor = Cursors.Default; }//LISTVIEW WIRD IN DATENBANK IMPORTIERT. private void rB_CheckedChanged(object sender, EventArgs e) { dTPUmsatz.Enabled = false; if (sender.GetType() == typeof(CheckBox)) { if(MessageBox.Show("Möchtest du wirklich eine Sonderliste importieren?", "Frage", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { OpenFileDialog dialog = new OpenFileDialog(); dialog.Filter = "Alle Dateien|*.*|TXT Dateien|*.txt|CSV Dateien|*.csv"; dialog.InitialDirectory = "C:"; if (dialog.ShowDialog() == DialogResult.OK) { filename = dialog.FileName; } DatenLesen(); } else { CheckBox cb = (CheckBox)sender; cb.Checked = false; } } //ABFRAGE BEI SONDERLISTE CHECKBOX OB DAS WIRKLICH GEWÜNSCHT WIRD else { RadioButton rb = (RadioButton)sender; if (rb.Parent == groupBoxImportdaten) { if (rBUmsatzListe.Checked) dTPUmsatz.Enabled = true; toolStripOpen.Visible = true; } } //BEI RADIOBUTTON AUSGEWÄHLT WIRD OPEN FELD SICHTBAR } private void tSBAbbrechen_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.Cancel; this.Close(); } private void Splash() { //Open a splash screen form FormLaden frm = new FormLaden(); Application.Run(frm); } } }