using BrightIdeasSoftware; 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.Drawing.Printing; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows; using System.Windows.Forms; using System.Windows.Input; using Point = System.Drawing.Point; using Size = System.Drawing.Size; namespace Deckungsbeitrag { public partial class FormNeuDeckungsbeitrag : Form { public List umsatzliste; private ListViewColumnSorter lvwColumnSorter; public List kundenliste; public List kostenliste; public Kunde kunde; public Benutzer benutzer; double bmin = 0; double bmax = 100; int bimage = 10; double[] erfpos = new double[2]; double[] erfneg = new double[2]; int erfnull = 0; int items = 0; int monat; int vpjahr; int aktjahr; int aktquartal; int Mietbetten; int Gesamtbetten; bool filter = false; bool iskosten = false; bool isaktiv = true; int[] quartale; public double[] kosten = new double[3]; byte[] olvsettings; Thread t; ImageList imageList = new ImageList(); public FormNeuDeckungsbeitrag() { //t = new Thread(new ThreadStart(Splash)); //t.Start(); InitializeComponent(); this.WindowState = FormWindowState.Minimized; //Fenster verbergen (Bis fertig geladen) this.groupBoxFilter.Visible = false; foreach (Control ctr in this.groupBoxFilter.Controls) ctr.Visible = false; imageList.Images.Add(Image.FromFile(ConfigurationManager.AppSettings["BildPfad"])); } public FormNeuDeckungsbeitrag(Benutzer benutzer, bool v) : this() { this.benutzer = benutzer; this.iskosten = v; //Einblenden von AddKosten wenn Kostenliste geladen und gleichzeitiges ausbelnden von KundeSuchen if (iskosten) this.tSBAddKosten.Visible = true; else this.tSButtonKundeSuchen.Visible = true; } private void FormNeuDeckungsbeitrag_Load(object sender, EventArgs e) { //StatusStrip Zahlen auf null setzten wegen Reload erfpos = new double[2]; erfneg = new double[2]; erfnull = 0; items = 0; //Sortieren und Filtern ermöglichen lvwColumnSorter = new ListViewColumnSorter(false); this.olvDeckungsbeitrag.ListViewItemSorter = lvwColumnSorter; this.olvDeckungsbeitrag.FilterMenuBuildStrategy = new MeinFilterMenu(); //ComboBox KundeSuchen ausblenden. bei Click auf Kunde suchen wird eingeblendet. this.tSComboBoxKndName.Visible = false; //Letztes vorhandenes Quartal (wenn 4 dann ganzes Jahr) und Jahr aus DB holen vpjahr fix auf 2019. aktquartal = OLVBewertung.GetLast()[0]; aktjahr = OLVBewertung.GetLast()[1]; vpjahr = 2019; //ColumnHeader Format bearbeiten und Columns generieren. this.olvDeckungsbeitrag.HeaderFormatStyle = Funktionen.GetHeader(); //OLV_ColumnHeader_Format(); this.olvDeckungsbeitrag.OwnerDraw = true; OLV_Load(aktjahr, monat, aktquartal, isaktiv, vpjahr, null, iskosten, null); OLV_State("AppStart", null); this.WindowState = FormWindowState.Maximized; //Fenster einblenden (Wenn fertig geladen) //Position und Größe ToolStrip und ListView an Screen anpassen this.toolStripMenu.Size = new Size(toolStripButton1.Size.Width + 20, this.Height); this.olvDeckungsbeitrag.Location = new Point(toolStripMenu.Width, 0); this.olvDeckungsbeitrag.Size = new Size(this.Width - toolStripMenu.Width - 15, toolStripMenu.Height - statusStrip1.Height); //Farbe der StatusStrip Labels für Erfolg this.tSSLErfolgNeg.BackColor = Properties.Settings.Default.ColNeg; this.tSSLErfolgNull.BackColor = Properties.Settings.Default.ColEqu; this.tSSLErfolgPos.BackColor = Properties.Settings.Default.ColPos; //t.Abort(); } private void OLVcolumnResize() { this.olvDeckungsbeitrag.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent); ListView.ColumnHeaderCollection cc = olvDeckungsbeitrag.Columns; for (int i = 0; i < cc.Count; i++) { int colWidth = TextRenderer.MeasureText(cc[i].Text, olvDeckungsbeitrag.Font).Width + 10; if (colWidth > cc[i].Width) { cc[i].Width = colWidth; } }//COLUMNS BREITE CONTENT ODER HEADER SIZE //OLV_Design(); } private void OLV_Load(int? aktjahr, int? monat, int? quartal, bool aktiv, int vpjahr, int[] quartale, bool kosten, Kunde kunde) { Cursor.Current = Cursors.WaitCursor; this.olvDeckungsbeitrag.SuspendLayout(); this.olvDeckungsbeitrag.BeginUpdate(); this.olvDeckungsbeitrag.Clear(); isaktiv = aktiv; if (!kosten) { if (isaktiv) { this.olvDeckungsbeitrag.CellEditActivation = ObjectListView.CellEditActivateMode.None; if (monat != 0) { Generator.GenerateColumns(this.olvDeckungsbeitrag, typeof(OLVBewertung), true); this.olvDeckungsbeitrag.SetObjects(OLVBewertung.GetList(aktjahr, monat, aktquartal, isaktiv, vpjahr, quartale, kunde != null ? kunde.KundeID : null)); } else { Generator.GenerateColumns(this.olvDeckungsbeitrag, typeof(OLVBewertung), true); this.olvDeckungsbeitrag.SetObjects(OLVBewertung.GetList(aktjahr, monat, quartal, isaktiv, vpjahr, quartale, kunde != null ? kunde.KundeID : null)); } //ColumnHeader Umsatz je nach Zeitraum Text ändern. foreach (OLVColumn c in this.olvDeckungsbeitrag.Columns) { if (quartal == null || quartal == 0) { if (monat == null || monat == 0) { if (quartale == null || quartale.Length == 0) { if (c.Name == "UmsatzVorperiode") c.Text = $"Umsatz {vpjahr}"; //Wenn Filter nach Jahren if (c.Name == "Umsatz1") c.Text = $"Umsatz {aktjahr}"; //Wenn Filter nach Jahren } else { if (c.Name == "UmsatzVorperiode") c.Text = $"Umsatz Q{quartale.Min()}-{quartale.Max()} {vpjahr}"; //Wenn Filter nach mehreren Quartalen if (c.Name == "Umsatz1") c.Text = $"Umsatz Q{quartale.Min()}-{quartale.Max()} {aktjahr}"; //Wenn Filter nach mehreren Quartalen } } else { if (c.Name == "UmsatzVorperiode") c.Text = $"Umsatz M{monat} {vpjahr}"; //Wenn Filter nach Monat if (c.Name == "Umsatz1") c.Text = $"Umsatz M{monat} {aktjahr}"; //Wenn Filter nach Monat } } else { if (quartal != 4) { if (c.Name == "UmsatzVorperiode") c.Text = $"Umsatz Q{quartal} {vpjahr}"; //Wenn Aktuelles Quartal ist 1-3 if (c.Name == "Umsatz1") c.Text = $"Umsatz Q{quartal} {aktjahr}"; //Wenn Aktuelles Quartal ist 1-3 } else { if (c.Name == "UmsatzVorperiode") c.Text = $"Umsatz {vpjahr}"; //Wenn Aktuelles Quartal ist 4 (Ganzes Jahr wird angezeigt) if (c.Name == "Umsatz1") c.Text = $"Umsatz {aktjahr}"; //Wenn Aktuelles Quartal ist 4 (Ganzes Jahr wird angezeigt) } } }//ColumnHeader Text ändern. Get_Ratingwerte(); //Holt Ratingwerte für Bewertung } else { Generator.GenerateColumns(this.olvDeckungsbeitrag, typeof(Kunde), true); this.olvDeckungsbeitrag.SetObjects(Kunde.GetList(isaktiv, string.Empty)); } //Inakive Kundenlsite laden -> mit letztem Jahresumsatz. } else { this.olvDeckungsbeitrag.CellEditActivation = ObjectListView.CellEditActivateMode.SingleClick; Generator.GenerateColumns(this.olvDeckungsbeitrag, typeof(Kosten), true); kostenliste = new List(Kosten.GetList(aktjahr, monat, quartal, aktiv, vpjahr, quartale)); this.olvDeckungsbeitrag.SetObjects(kostenliste); } //Kostenliste anzeigen. GetStatusStripData(); OLVcolumnResize(); this.olvDeckungsbeitrag.EndUpdate(); this.olvDeckungsbeitrag.ResumeLayout(); Cursor.Current = Cursors.Default; } //Click - Events private void ButtonOK_Click(object sender, EventArgs e) { //StatusStrip Zahlen auf null setzten wegen Reload erfpos = new double[2]; erfneg = new double[2]; erfnull = 0; items = 0; aktjahr = int.Parse(comboBoxAktJahr.SelectedItem.ToString()); vpjahr = int.Parse(comboBoxVPJahr.SelectedItem.ToString()); monat = (int)comboBoxMonat.SelectedIndex + 1; //if (this.checkBoxKosten.Checked) iskosten = true; //else iskosten = false; if (this.checkBoxInaktiv.Checked) isaktiv = false; else isaktiv = true; int idx = 0; foreach (CheckBox cb in this.groupBoxQuartal.Controls) { if (cb.Checked) { quartale[idx] = int.Parse(cb.Text); idx++; } } OLV_Load(aktjahr, monat, null, isaktiv, vpjahr, quartale, iskosten, kunde); //MIT DB ALLE RELEVANTEN SITUATIONEN LADEN UND PROBIEREN!!!!! } //Filter bestätigen und OLV-Laden beginnen private void ToolStripButtonFilter_Click(object sender, EventArgs e) { Point location = olvDeckungsbeitrag.Location; if (filter == false) { filter = true; this.groupBoxFilter.Visible = true; this.groupBoxFilter.Location = new Point(toolStripMenu.Width, 0); this.groupBoxFilter.Size = new Size(this.Width - toolStripMenu.Width - 15, 95); this.olvDeckungsbeitrag.Location = new Point(location.X, location.Y + 100); this.olvDeckungsbeitrag.Size = new Size(olvDeckungsbeitrag.Size.Width, olvDeckungsbeitrag.Size.Height - 100); foreach (Control ctr in this.groupBoxFilter.Controls) ctr.Visible = true; List list = new List(Umsatz.GetJahre()); List list2 = new List(Umsatz.GetJahre()); this.comboBoxAktJahr.DataSource = list; this.comboBoxAktJahr.SelectedIndex = (int)list.Count() - 1; this.comboBoxVPJahr.DataSource = list2; this.comboBoxVPJahr.SelectedIndex = 0; if (iskosten) { checkBoxInaktiv.Visible = false; comboBoxVPJahr.Enabled = false; } } else { filter = false; this.groupBoxFilter.Visible = false; this.olvDeckungsbeitrag.Location = new Point(location.X, location.Y - 100); this.olvDeckungsbeitrag.Size = new Size(olvDeckungsbeitrag.Size.Width, olvDeckungsbeitrag.Size.Height + 100); foreach (Control ctr in this.groupBoxFilter.Controls) ctr.Visible = false; umsatzliste = null; FormNeuDeckungsbeitrag_Load(this, null); } } //Filtermenü einblenden private void TSButtonKundeSuchen_Click(object sender, EventArgs e) { if (!tSComboBoxKndName.Visible) { this.tSComboBoxKndName.Size = new Size(180, 40); this.tSComboBoxKndName.Visible = true; } else this.tSComboBoxKndName.Visible = false; } //Clicken für Kunde suchen - ComboboxKndName einblenden private void ToolStripBeenden_Click(object sender, EventArgs e) { OLV_State("Speichern", null); this.DialogResult = DialogResult.Cancel; this.Close(); } //Speichern des OLV-Status private void tSBAddKosten_Click(object sender, EventArgs e) { Kosten newkosten = new Kosten(); newkosten.Betrag = 0; newkosten.Bezeichnung = string.Empty; newkosten.Datum = DateTime.Now; newkosten.KontoNr = 0; this.olvDeckungsbeitrag.AddObject(newkosten); foreach (OLVColumn cl in this.olvDeckungsbeitrag.Columns) if (cl.Name != "KontoNr") cl.IsEditable = true; this.olvDeckungsbeitrag.Refresh(); this.olvDeckungsbeitrag.EnsureVisible(olvDeckungsbeitrag.Items.Count - 1); } //Kosten hinzufügen //Drucken - Events private void ToolStripPrint_Click(object sender, EventArgs e) { //ListViewPrinter printer = new ListViewPrinter(); //printer.ListView = this.olvDeckungsbeitrag; //printer.PrintPreview(); //PrintDialog dialog = new PrintDialog(); //if (dialog.ShowDialog() == DialogResult.OK) //{ // PrintPreviewDialog previewDialog = new PrintPreviewDialog(); // PrintDocument printDocument = new PrintDocument(); // printDocument.PrintPage += new PrintPageEventHandler(printDocument_PrintPage); // printDocument.PrinterSettings = dialog.PrinterSettings; // previewDialog.UseAntiAlias = true; // previewDialog.Document = printDocument; // (previewDialog as Form).WindowState = FormWindowState.Maximized; // previewDialog.ShowDialog(); //} } private void PrintDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { e.Graphics.DrawImage(Report.Get_ListView_Report((OLVListItem)this.olvDeckungsbeitrag.Objects), 0, 0); } //Diverse - Events private void Get_Ratingwerte() { if (!Properties.Settings.Default.MaxChecked) bmax = (int)OLVBewertung.GetTopLast(aktjahr, monat, aktquartal, true, vpjahr)[1]; else bmax = Properties.Settings.Default.RatMax; if (!Properties.Settings.Default.MinChecked) bmin = (int)OLVBewertung.GetTopLast(aktjahr, monat, aktquartal, true, vpjahr)[0]; else bmin = Properties.Settings.Default.RatMin; bimage = Properties.Settings.Default.ZAnzahl; } //Ratingwerte wenn nicht individuell dann an Top Last der Liste orientieren sonst Werte aus Settings. private void OLV_State(object sender, EventArgs e) { if(sender.ToString() == "AppStart") { if (Properties.Settings.Default.OLVState != string.Empty) { olvsettings = Convert.FromBase64String(Properties.Settings.Default.OLVState); this.olvDeckungsbeitrag.RestoreState(olvsettings); } } //Lädt OLV_State bei FormNeuDeckungsbeitrag Start. if(sender.ToString() == "StartmitFilter") { if (Properties.Settings.Default.OLVState != string.Empty) { olvsettings = Convert.FromBase64String(Properties.Settings.Default.OLVState); this.olvDeckungsbeitrag.RestoreState(olvsettings); } } //Lädt OLV_State beim Laden mit Filter. if(sender.ToString() == "Speichern") { if (!filter) { olvsettings = this.olvDeckungsbeitrag.SaveState(); string s = Convert.ToBase64String(olvsettings); Properties.Settings.Default.OLVState = s; Properties.Settings.Default.Save(); } //Speichert OLV_State ohne Filter. else { olvsettings = this.olvDeckungsbeitrag.SaveState(); string s = Convert.ToBase64String(olvsettings); Properties.Settings.Default.OLVState = s; Properties.Settings.Default.Save(); } //Speichert OLV_State wenn Filter. } //Speichert OLV_State bei Click auf SPEICHERN (toolStripBeenden) } //SPEICHERN UND LADEN DES OLV_STATE (Status der Spalten) private void GetStatusStripData() { if (iskosten) { tSSLMietbetten.Text = "Kostensumme Rest:"; tSSLGesamtbetten.Text = "Kostensumme Variabel:"; tSSLKunden.Text = "Summe Fixkosten (Lohn / Miet):"; //double[] kostenkat = new double[4]; double[] kostenkat = Berechnungen.Kostensummen(kostenliste); tSSLMietbettenAnz.Text = kostenkat[3].ToString("C2"); tSSLGesamtbettenAnz.Text = kostenkat[2].ToString("C2"); tSSLKundenzahlen.Text = kostenkat[0].ToString("C2") + " / " + kostenkat[1].ToString("C2"); tSSLErfolg.Visible = tSSLErfolgNeg.Visible = tSSLErfolgNull.Visible = tSSLErfolgPos.Visible = false; tSSLItemsAnz.Text = items.ToString(); } else { tSSLMietbetten.Text = "Mietbetten:"; tSSLGesamtbetten.Text = "Gesamtbetten:"; tSSLKunden.Text = "Kunden (Aktiv / Inaktiv / Gesamt):"; //BETTENANZAHL Mietbetten = Kunde.GetBettenAnzahl("Miete"); Gesamtbetten = Kunde.GetBettenAnzahl("Lohn"); this.tSSLGesamtbettenAnz.Text = Gesamtbetten.ToString(); this.tSSLMietbettenAnz.Text = Mietbetten.ToString(); //KUNDENANZAHL this.tSSLKundenzahlen.Text = Kunde.GetAnzahlKnd(true).ToString() + " / " + Kunde.GetAnzahlKnd(false).ToString() + " / " + Kunde.GetAnzahlKnd(null).ToString(); //ERFOLGSZAHLEN this.tSSLErfolgPos.Text = erfpos[0].ToString() + " / " + erfpos[1].ToString("C2"); this.tSSLErfolgNull.Text = erfnull.ToString(); this.tSSLErfolgNeg.Text = erfneg[0].ToString() + " / " + erfneg[1].ToString("C2"); this.tSSLItemsAnz.Text = items.ToString(); } } //Diverse Zahlen im StatusStrip einfügen private void OlvDeckungsbeitrag_BeforeSorting(object sender, BeforeSortingEventArgs e) { //if(MessageBox.Show("Möchtest du die Gruppierung beibehalten?")) if(e.ColumnToSort != null) { if (e.ColumnToSort.DataType != null) { if (e.ColumnToSort.Index == lvwColumnSorter.SortColumn) { // Reverse the current sort direction for this column. if (lvwColumnSorter.Order == SortOrder.Ascending) lvwColumnSorter.Order = SortOrder.Descending; else lvwColumnSorter.Order = SortOrder.Ascending; } else { // Set the column number that is to be sorted; default to ascending. lvwColumnSorter.SortColumn = e.ColumnToSort.Index; lvwColumnSorter.Order = SortOrder.Ascending; } this.olvDeckungsbeitrag.ListViewItemSorter = new ColumnComparer(e.ColumnToSort, lvwColumnSorter.Order); e.Handled = true; } } } private void Get_Border_Paint(object sender, PaintEventArgs e) { ToolStripItem item = (ToolStripItem)sender; ControlPaint.DrawBorder(e.Graphics, new Rectangle(0, 0, item.Width, item.Height), Color.White, ButtonBorderStyle.Solid); }//BOARDER UM TOOLSTRIP-BUTTON private void Splash() { //Open a splash screen form FormLaden frm = new FormLaden(); Application.Run(frm); } //Ladescreen anzeigen bis Thread beendet private void GroupBoxQuartal_Validating(object sender, CancelEventArgs e) { int idx = 0; foreach (CheckBox cb in this.groupBoxQuartal.Controls) if (cb.Checked) ++idx; if (idx == 4) { MessageBox.Show("Es sind zu viele Quartale markiert. Maximal 3 erlaubt." + Environment.NewLine + "Um ein ganzes Jahr zu sehen weder Quartal noch Monat wählen."); this.groupBoxQuartal.BackColor = Color.Red; e.Cancel = true; } else { quartale = new int[idx]; this.groupBoxQuartal.BackColor = Program.Wirlblau; } } //Max 3 Quartale auswählbar sonst ganzes Jahr private void tSBEinstellung_Click(object sender, EventArgs e) { FormEinstellung einstellung = new FormEinstellung(); if (einstellung.ShowDialog() == DialogResult.OK) { FormNeuDeckungsbeitrag_Load(this, null); } } //Einstellungen öffnen //Kunde suchen - Events private void TSComboBoxKndName_TextUpdate(object sender, EventArgs e) { if (!string.IsNullOrEmpty(tSComboBoxKndName.Text)) { List tmplist = Kunde.GetTmpList(tSComboBoxKndName.Text, null); if (int.TryParse(tSComboBoxKndName.Text, out _)) foreach (Kunde kunde in tmplist) tSComboBoxKndName.AutoCompleteCustomSource.Add(kunde.KundeNummer); else foreach (Kunde kunde in tmplist) tSComboBoxKndName.AutoCompleteCustomSource.Add(kunde.KundeName); } } //Aktualisieren von DataSource während dem Tippen private void TSComboBoxKndName_Leave(object sender, EventArgs e) { ToolStripComboBox tb = (ToolStripComboBox)sender; if (string.IsNullOrEmpty(tb.Text)) { tb.Text = "SUCHTEXT"; if (!filter) FormNeuDeckungsbeitrag_Load(this, null); else ButtonOK_Click(this, null); } else { kunde = new Kunde(); if (int.TryParse(this.tSComboBoxKndName.Text, out _)) kunde = Kunde.GetKunde(this.tSComboBoxKndName.Text, null, null); else kunde = Kunde.GetKunde(null, null, this.tSComboBoxKndName.Text.ToLower()); ButtonOK_Click(this, null); } } //Text überprüfen und Kunde laden (Wenn leer Standarttext einfügen) private void TSComboBoxKndName_Enter(object sender, EventArgs e) { ToolStripComboBox tb = (ToolStripComboBox)sender; tb.Text = ""; } //Entfernen vom Standarttext wenn Enter private void TSComboBoxKndName_KeyDown(object sender, KeyEventArgs e) { if(e.KeyCode == Keys.Enter) { TSComboBoxKndName_Leave(this.tSComboBoxKndName, null); e.Handled = true; } } //Enter Click registrieren und dadurch ComboBox_Leave //ObjectListView - Events private void OlvDeckungsbeitrag_FormatCell(object sender, FormatCellEventArgs e) { if (e.CellValue != null) { if (e.Column.AspectName == "DifferenzEUR") { e.SubItem.Font = new Font(e.Item.Font, FontStyle.Bold); if (e.CellValue.ToString().StartsWith("-")) e.SubItem.ForeColor = Properties.Settings.Default.ColNeg; else e.SubItem.ForeColor = Properties.Settings.Default.ColPos; } if (e.Column.AspectName == "DifferenzPRO") { e.SubItem.Font = new Font(e.Item.Font, FontStyle.Bold); if (e.CellValue.ToString().StartsWith("-")) e.SubItem.ForeColor = Properties.Settings.Default.ColNeg; else e.SubItem.ForeColor = Properties.Settings.Default.ColPos; } if (e.Column.AspectName == "ErfolgGesamt") { if ((double)e.CellValue > 0) { e.SubItem.BackColor = Properties.Settings.Default.ColPos; e.SubItem.ForeColor = Color.White; erfpos[1] += (double)e.CellValue; ++erfpos[0]; } if ((double)e.CellValue == 0) { e.SubItem.BackColor = Properties.Settings.Default.ColEqu; e.SubItem.ForeColor = Color.Black; ++erfnull; } if ((double)e.CellValue < 0) { e.SubItem.BackColor = Properties.Settings.Default.ColNeg; e.SubItem.ForeColor = Color.White; erfneg[1] += (double)e.CellValue; ++erfneg[0]; } } //Versuch Text Aligne pro Item ändern. //if (e.Column.AspectName == "Bewertung") //{ // if ((int)e.CellValue >= 0) e.Column.TextAlign = HorizontalAlignment.Right; // else e.Column.TextAlign = HorizontalAlignment.Left; // } } } //Automatisch ausgelöst, Möglichkeit einzelne Zellen zu formatieren. private void OlvDeckungsbeitrag_FormatRow(object sender, FormatRowEventArgs e) { ++items; if (!iskosten && isaktiv) { this.olvDeckungsbeitrag.AllColumns[0].Renderer = new MultiImageRenderer(imageList.Images[0], bimage, (int)bmin, (int)bmax); e.Item.ToolTipText = e.Item.Text; //Versuch bei Negativzahl anderes Image anzeigen. //if (double.Parse(e.Item.Text) >= 0) //{ // this.olvDeckungsbeitrag.AllColumns[0].Renderer = new MultiImageRenderer(imageList.Images[0], bimage, 0, (int)bmax); // e.Item.ToolTipText = e.Item.Text; // //this.olvDeckungsbeitrag.AllColumns[0].TextAlign = HorizontalAlignment.Right; // //Text Aligne right //} //else //{ // this.olvDeckungsbeitrag.AllColumns[0].Renderer = new MultiImageRenderer(imageList.Images[1], bimage, (int)bmin, 0); // //Text Aligne left //} //Bei NegativZahl anderes Image anzeigen. NOCH NICHT VERSUCHT. } } //Automatisch ausgelöst, Möglichkeit einzelne RowObjects zu formatieren. private void OlvDeckungsbeitrag_ItemChecked(object sender, ItemCheckedEventArgs e) { OLVListItem item = (OLVListItem)e.Item; kunde = Kunde.GetKunde(item.Text, null, string.Empty); kunde.Aktiv = item.Checked; kunde.Save(); GetStatusStripData(); } //Vermutlich UNNÖTIG durch SubItemChecking abgelöst. private void OlvDeckungsbeitrag_SubItemChecking(object sender, SubItemCheckingEventArgs e) { kunde = Kunde.GetKunde(e.ListViewItem.Text, null, string.Empty); kunde.Aktiv = e.ListViewItem.Checked; kunde.Save(); GetStatusStripData(); } //SubItem Aktiv mit CheckBox Status ändern. private void OlvDeckungsbeitrag_MouseDoubleClick(object sender, MouseEventArgs e) { OLVListItem item = (OLVListItem)this.olvDeckungsbeitrag.GetItemAt(e.X, e.Y); OLVBewertung bew = (OLVBewertung)item.RowObject; Kunde knd = Kunde.GetKunde(null, bew.KundeID, string.Empty); FormKundeVW daten = new FormKundeVW(knd); if(daten.ShowDialog() == DialogResult.OK) { } } //RowObject (Kunde) in KundenDaten öffnen private void olvDeckungsbeitrag_CellEditValidating(object sender, CellEditEventArgs e) { if (e.Column.Name == "Kategorie") { StringCollection variabel = new StringCollection(); variabel.AddRange(ConfigurationManager.AppSettings["Variabel"].Split(',')); StringCollection fixlohn = new StringCollection(); fixlohn.AddRange(ConfigurationManager.AppSettings["FixLohn"].Split(',')); StringCollection fixmiet = new StringCollection(); fixmiet.AddRange(ConfigurationManager.AppSettings["FixMiete"].Split(',')); foreach (Kosten kosten in Kosten.GetUpdateList(e.ListViewItem.Text)) { if(kosten.KontoNr.ToString() == e.ListViewItem.Text) { kosten.Kategorie = (KostenKat)e.NewValue; kosten.Save(); } } if ((KostenKat)e.NewValue == KostenKat.Variabel) variabel.Add(e.ListViewItem.Text); if ((KostenKat)e.NewValue == KostenKat.FixMiete) fixmiet.Add(e.ListViewItem.Text); if ((KostenKat)e.NewValue == KostenKat.FixLohn) fixlohn.Add(e.ListViewItem.Text); if ((KostenKat)e.Value == KostenKat.Variabel) variabel.Remove(e.ListViewItem.Text); if ((KostenKat)e.Value == KostenKat.FixMiete) fixmiet.Remove(e.ListViewItem.Text); if ((KostenKat)e.Value == KostenKat.FixLohn) fixlohn.Remove(e.ListViewItem.Text); Save_Kostenstelle(variabel, fixmiet, fixlohn); } if (e.Column.Name == "Betrag") { Kosten kstn = (Kosten)e.RowObject; kstn.Betrag = (double)e.NewValue; kstn.Save(); } if (e.Column.Name == "Bezeichnung") { Kosten kost = (Kosten)e.RowObject; Kosten nokost = Kosten.GetKosten(null, e.NewValue.ToString()); kost.KontoNr = nokost.KontoNr; kost.Kategorie = nokost.Kategorie; kost.Bezeichnung = nokost.Bezeichnung.Substring(0,1).ToUpper() + nokost.Bezeichnung.Substring(1).ToLower(); kost.Save(); e.NewValue = kost.Bezeichnung.ToString(); } if (e.Column.Name == "Datum") { Kosten kstn = (Kosten)e.RowObject; kstn.Datum = (DateTime)e.NewValue; kstn.Save(); } } //Bei Verlassen der Zelle nach Edit wird Value kontrolliert private void olvDeckungsbeitrag_CellEditStarting(object sender, CellEditEventArgs e) { e.Control.Bounds = e.ListViewItem.GetSubItemBounds(e.SubItemIndex); } //Vor Edit wird Control an Spaltenbreite angepasst private void Save_Kostenstelle(StringCollection variabel, StringCollection fixmiet, StringCollection fixlohn) { string var = string.Empty; string lohn = string.Empty; string miet = string.Empty; foreach (string s in variabel) var += "," + s; foreach (string s in fixmiet) miet += "," + s; foreach (string s in fixlohn) lohn += "," + s; Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath); config.AppSettings.Settings.Remove("Variabel"); config.AppSettings.Settings.Add("Variabel", var.Remove(0, 1)); config.AppSettings.Settings.Remove("FixMiete"); config.AppSettings.Settings.Add("FixMiete", miet.Remove(0, 1)); config.AppSettings.Settings.Remove("FixLohn"); config.AppSettings.Settings.Add("FixLohn", lohn.Remove(0, 1)); config.Save(); } //Speichern der KontoNr. in einer Kostenstelle //FUNKTIONIERT NICHT } }