public void CreateEingangsrechnungTest()
        {
            RechnungsManager target = new RechnungsManager();
            EingangsrechnungTable table = new EingangsrechnungTable();
            table.Archivierungspfad = "path";
            table.Bezeichnung = "test";
            table.KontaktID = 1;
            table.Rechnungsdatum = string.Empty; // this should lead to exception

            target.CreateEingangsrechnung(table);
        }
        private void ShowUmsaetze(object sender, EventArgs e)
        {
            this.umsaetzeMsgLabel.Visible = false;

            // load all Eingangsrechnungen
            RechnungsManager loader = new RechnungsManager();
            List<EingangsrechnungsView> eingang = new List<EingangsrechnungsView>();
            List<AusgangsrechnungsView> ausgang = new List<AusgangsrechnungsView>();

            try
            {
                eingang = loader.LoadEingangsrechnungsView();
                ausgang = loader.LoadAusgangsrechnungsView();
            }
            catch(DataBaseException)
            {
                this.umsaetzeMsgLabel.ForeColor = Color.Red;
                this.umsaetzeMsgLabel.Text = "Ein Datenbankproblem ist aufgetreten";
                this.umsaetzeMsgLabel.Visible = true;
            }

            // create PDF document
            PdfDocument document = new PdfDocument();
            PdfPage page = document.AddPage();
            XGraphics gfx = XGraphics.FromPdfPage(page);

            XFont header = new XFont("Calibri", 20, XFontStyle.Bold);
            XFont columHeader = new XFont("Calibri", 10, XFontStyle.Bold);
            XFont Text = new XFont("Calibri", 10);

            int i = 20;

            foreach(EingangsrechnungsView table in eingang)
            {
                gfx.DrawString(table.ID + " " + table.Bezeichnung + " " + table.Betrag + " " + table.Rechnungsdatum, header, XBrushes.Black, 20, i);
                i += 20;
            }
            foreach (AusgangsrechnungsView table in ausgang)
            {
                gfx.DrawString(table.ID + " " + table.Bezeichnung + " " + table.Betrag + " " + table.Rechnungsdatum, header, XBrushes.Black, 20, i);
                i += 20;
            }
            //gfx.DrawString("Umsätze", header, XBrushes.Black,new XRect(0, 0, page.Width, page.Height),XStringFormats.TopCenter);

            string filename = "HelloWorld.pdf";
            document.Save(filename);
            Process.Start(filename);
        }
        // Save Eingangsrechnung and Buchungszeilen
        private void FinishAccount(object sender, EventArgs e)
        {
            // if there are no elements, return
            if (this.buchungszeilenBindingSource.Count < 1)
            {
                this.eingangsrechnungMsgLabel.Text = "Keine Daten!";
                this.eingangsrechnungMsgLabel.ForeColor = Color.Red;
                this.eingangsrechnungMsgLabel.Show();
                return;
            }

            // save Eingangsrechnung
            int eingangsrechnungsID = this.SaveEingangsrechnung();

            // check for errors while saving Eingangsrechnung to database
            if (eingangsrechnungsID == -1) { return; }

            // get all Buchungszeilen out of BindingSource
            List<BuchungszeilenTable> list = new List<BuchungszeilenTable>();
            for (int i = 0; i < this.buchungszeilenBindingSource.Count; i++)
            {
                list.Add((BuchungszeilenTable)this.buchungszeilenBindingSource.List[i]);
            }

            // save all Buchungszeilen
            RechnungsManager manager = new RechnungsManager();
            foreach (BuchungszeilenTable table in list)
            {
                try
                {
                    manager.SaveBuchungszeile(table, eingangsrechnungsID);
                }
                catch (InvalidInputException ex)
                {
                    this.eingangsrechnungMsgLabel.Text = ex.Message;
                    this.eingangsrechnungMsgLabel.ForeColor = Color.Red;
                    this.eingangsrechnungMsgLabel.Show();
                    return;
                }
                catch (SQLiteException ex)
                {
                    this.eingangsrechnungMsgLabel.Text = ex.Message;
                    this.eingangsrechnungMsgLabel.ForeColor = Color.Red;
                    this.eingangsrechnungMsgLabel.Show();
                    return;
                }
            }

            this.ResetEingangsrechnung(null, null);
        }
        // save a new Eingangsrechnung
        private int SaveEingangsrechnung()
        {
            RechnungsManager manager = new RechnungsManager();
            int rechnungsid;

            // save Eingangsrechnung in database
            try
            {
                rechnungsid = manager.CreateEingangsrechnung(this.eingangsrechnung);
            }
            catch (InvalidInputException e)
            {
                this.logger.Log(Logger.Level.Error, e.Message);
                this.eingangsrechnungMsgLabel.Text = e.Message;
                this.eingangsrechnungMsgLabel.ForeColor = Color.Red;
                this.eingangsrechnungMsgLabel.Show();
                return -1;
            }
            catch (SQLiteException e)
            {
                this.logger.Log(Logger.Level.Error, e.Message);
                this.eingangsrechnungMsgLabel.Text = e.Message;
                this.eingangsrechnungMsgLabel.ForeColor = Color.Red;
                this.eingangsrechnungMsgLabel.Show();
                return -1;
            }

            this.eingangsrechnungMsgLabel.Text += "\nEingangsrechnung gespeichert.\n";

            return rechnungsid;
        }
        /// <summary>
        /// Creates a new Ausgangsrechnung with the provided parameters
        /// </summary>
        /// <param name="sender">The sending button</param>
        /// <param name="e">The EventArgs</param>
        private void CreateAusgangsrechnung(object sender, EventArgs e)
        {
            // reset message label
            this.ausgangsrechnungMsgLabel.Visible = false;
            this.ausgangsrechnungMsgLabel.Text = string.Empty;

            // check if a projekt is selected
            if (this.projekteComboBox.SelectedIndex < 1)
            {
                this.ausgangsrechnungMsgLabel.Visible = true;
                this.ausgangsrechnungMsgLabel.Text = "Kein Projekt ausgewählt";
                this.ausgangsrechnungMsgLabel.ForeColor = Color.Red;
                return;
            }

            AusgangsrechnungTable table = new AusgangsrechnungTable();

            // Get values
            int projektID = GlobalActions.GetIdFromCombobox(this.projekteComboBox.SelectedValue.ToString(), this.ausgangsrechnungMsgLabel);
            string unpaidBalanceString = this.unpaidBalanceTextBox.Text;
            string rechnungstitelString = this.rechnungstitelTextBox.Text;

            double unpaidBalance;

            // Validate values
            IRule posintval = new PositiveIntValidator();
            IRule posdoubval = new PositiveDoubleValidator();
            IRule lnhsv = new LettersNumbersHyphenSpaceValidator();
            IRule slv = new StringLength150Validator();

            DataBindingFramework.BindFromInt(projektID.ToString(), "ProjektID", this.ausgangsrechnungMsgLabel, false, posintval);
            unpaidBalance = DataBindingFramework.BindFromDouble(unpaidBalanceString, "Offener Betrag", this.ausgangsrechnungMsgLabel, false, posdoubval);
            DataBindingFramework.BindFromString(rechnungstitelString, "Rechnungstitel", this.ausgangsrechnungMsgLabel, false, lnhsv, slv);

            // return if errors occured
            if (this.ausgangsrechnungMsgLabel.Visible)
            {
                return;
            }

            // no errors, send values to business layer
            RechnungsManager saver = new RechnungsManager();

            try
            {
                saver.CreateAusgangsrechnung(projektID, unpaidBalance, rechnungstitelString);
            }
            catch (InvalidInputException)
            {
                this.logger.Log(Logger.Level.Error, "The business layer returned the provided values for saving a new Ausgangsrechnung with an error.");
            }
            catch (DataBaseException ex)
            {
                this.logger.Log(Logger.Level.Error, "A serious problem with the database occured while trying to save a new Ausgangsrechnung.");
                this.logger.Log(Logger.Level.Error, ex.Message);
                this.ausgangsrechnungMsgLabel.Text = ex.Message;
                this.ausgangsrechnungMsgLabel.ForeColor = Color.Red;
                this.ausgangsrechnungMsgLabel.Show();
            }

            // show success message label (only if saving has been successful)
            if (!this.ausgangsrechnungMsgLabel.Visible)
            {
                GlobalActions.ShowSuccessLabel(this.ausgangsrechnungMsgLabel);
            }
        }