721 lines
27 KiB
C#
721 lines
27 KiB
C#
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<Kunde> umsatzliste;
|
|
private ListViewColumnSorter lvwColumnSorter;
|
|
public List<Kunde> kundenliste;
|
|
public List<Kosten> 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>(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<string> list = new List<string>(Umsatz.GetJahre());
|
|
List<string> list2 = new List<string>(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 = Color.FromArgb(1, 53, 101);
|
|
}
|
|
} //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<Kunde> tmplist = Kunde.GetTmpList(tSComboBoxKndName.Text);
|
|
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
|
|
|
|
|
|
|
|
}
|
|
}
|