/// <summary> /// Diese Methode erstellt für das angezeigte Angebot implizit einen Auftrag und danach eine Rechnung und öffnet den Sofortdruck-Dialog /// </summary> /// <param name="schlussrechnung">Gibt an ob es sich um eine Schlussrechnung handelt (true) oder nicht (false)</param> private void CreateInvoiceForOrderPositions(bool schlussrechnung) { // Auftrag erstellen Auftrag auftrag = CreateOrderForOfferPositionsWithoutOrderID(); using (DataBaseDataContext dbContext = new DataBaseDataContext()) { // Auftragspositionen zum Auftrag ermitteln. var auftrag_positionen = dbContext.Auftrag_Position.Where(ap => ap.AuftragID.Equals(auftrag.AuftragID)); var rechnung = new DB.Rechnung { Datum = dateAngVorgabeRech.Value.Date != DateTime.Today.Date ? dateAngVorgabeRech.Value.Date : DateTime.Today.Date, Steuer = auftrag.Steuer, KundeID = auftrag.KundeID, Typ = auftrag.Typ, BV = auftrag.BV, BV2 = auftrag.BV2, Zahlungsbedingung = auftrag.Zahlungsbedingung, Betreff = auftrag.Betreff, Nachlass = auftrag.Nachlass, NachlassArt = auftrag.NachlassArt, Aufmaß = auftrag.Aufmaß, Anfahrt = auftrag.Anfahrt, Sondertext = auftrag.Sondertext, Schlussrechnung = schlussrechnung ? "ja" : null }; try { dbContext.Rechnung.InsertOnSubmit(rechnung); dbContext.SubmitChanges(); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } decimal sum = 0.0m; foreach (Auftrag_Position pos in auftrag_positionen) { var rechnungPosition = new Rechnung_Position() { RechnungID = rechnung.RechnungID, Artikel = pos.Artikel, Sondertext = pos.Sondertext, Typ = pos.Typ, AnlagenStk = pos.AnlagenStk, Breite = pos.Breite, Tiefe = pos.Tiefe, Türen = pos.Türen, TW = pos.TW, ZuschlagTür = pos.ZuschlagTür, Einzelpreis = pos.Einzelpreis, Zuschlag = pos.Zuschlag, ZuschlagArt = pos.ZuschlagArt, Alupulver = pos.Alupulver, Montage = pos.Montage, AussparungStk = pos.AussparungStk, AussparungTxt = pos.AussparungTxt, Alternativ1Typ = pos.Alternativ1Typ, Alternativ1Preis = pos.Alternativ1Preis, Alternativ2Typ = pos.Alternativ2Typ, Alternativ2Preis = pos.Alternativ2Preis, SondertextOben = pos.SondertextOben, SonderartikelEinheit = pos.SonderartikelEinheit }; // Increment Gesamtsumme. sum += rechnungPosition.Einzelpreis * rechnungPosition.AnlagenStk; sum += rechnungPosition.Alupulver * rechnungPosition.AnlagenStk; try { dbContext.Rechnung_Position.InsertOnSubmit(rechnungPosition); dbContext.SubmitChanges(); pos.RechnungID = rechnung.RechnungID; dbContext.SubmitChanges(); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } try { // Von der Gesamtsumme der Positionen den Nachlass abziehen. if (Func.IsNumeric(tbxNachlass.Text, true) & tbxNachlass.Text != "" & cobNachlass.SelectedIndex == 0) // Prozent { sum = sum - (sum * decimal.Parse(tbxNachlass.Text) / 100); } else if (Func.IsNumeric(tbxNachlass.Text, true) & tbxNachlass.Text != "") { sum = sum - decimal.Parse(tbxNachlass.Text); } // Zu der Gesamtsumme der Positionen die MwSt hinzurechnen. //if (cobMwSt.SelectedIndex == 0) //{ // sum = sum * 0.19m + sum; //} sum = sum * (Decimal)cobMwSt.SelectedValue + sum; // Rechnung mit Gesamtbetrag updaten. rechnung.Gesamtbetrag = sum; dbContext.SubmitChanges(); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } this.Cursor = Cursors.WaitCursor; PrintManager.PrintDirectlyWithDialog(EReports.Rechnung, new List<int>() { 1, rechnung.RechnungID }); this.Cursor = Cursors.Default; } }
private void itemAllPos_Click(object sender, EventArgs e) { using (DataBaseDataContext dbContext = new DataBaseDataContext()) { var auftrag = dbContext.Auftrag.Where(auf => auf.AuftragID.Equals(int.Parse(tbxAufNummer.Text))).FirstOrDefault(); var rechnung = new DB.Rechnung { Datum = dateAufVorgabeRech.Value.Date != DateTime.Today.Date ? dateAufVorgabeRech.Value.Date : DateTime.Today.Date, Steuer = auftrag.Steuer, KundeID = auftrag.KundeID, Typ = auftrag.Typ, BV = auftrag.BV, BV2 = auftrag.BV2, Zahlungsbedingung = auftrag.Zahlungsbedingung, Betreff = auftrag.Betreff, Nachlass = auftrag.Nachlass, NachlassArt = auftrag.NachlassArt, Aufmaß = auftrag.Aufmaß, Anfahrt = auftrag.Anfahrt, Sondertext = auftrag.Sondertext, }; try { dbContext.Rechnung.InsertOnSubmit(rechnung); dbContext.SubmitChanges(); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } decimal sum = 0.0m; foreach (DataGridViewRow row in dgrPositionen.Rows) { // Es werden nur Auftragspositionen berücksichtigt, die noch keinem Auftrag zugeordnet wurden. if (row.Cells["RechnungID"].Value == null) { var auftragPosition = dbContext.Auftrag_Position.Where(ap => ap.PosID.Equals(row.Cells["PosID"].Value)).FirstOrDefault(); var rechnungPosition = new Rechnung_Position() { RechnungID = rechnung.RechnungID, Artikel = auftragPosition.Artikel, Sondertext = auftragPosition.Sondertext, Typ = auftragPosition.Typ, AnlagenStk = auftragPosition.AnlagenStk, Breite = auftragPosition.Breite, Tiefe = auftragPosition.Tiefe, Türen = auftragPosition.Türen, TW = auftragPosition.TW, ZuschlagTür = auftragPosition.ZuschlagTür, Einzelpreis = auftragPosition.Einzelpreis, Zuschlag = auftragPosition.Zuschlag, ZuschlagArt = auftragPosition.ZuschlagArt, Alupulver = auftragPosition.Alupulver, Montage = auftragPosition.Montage, AussparungStk = auftragPosition.AussparungStk, AussparungTxt = auftragPosition.AussparungTxt, Alternativ1Typ = auftragPosition.Alternativ1Typ, Alternativ1Preis = auftragPosition.Alternativ1Preis, Alternativ2Typ = auftragPosition.Alternativ2Typ, Alternativ2Preis = auftragPosition.Alternativ2Preis, SondertextOben = auftragPosition.SondertextOben, SonderartikelEinheit = auftragPosition.SonderartikelEinheit }; // Increment Gesamtsumme. sum += rechnungPosition.Einzelpreis * rechnungPosition.AnlagenStk; sum += rechnungPosition.Alupulver * rechnungPosition.AnlagenStk; try { dbContext.Rechnung_Position.InsertOnSubmit(rechnungPosition); dbContext.SubmitChanges(); auftragPosition.RechnungID = rechnung.RechnungID; dbContext.SubmitChanges(); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } } try { // Von der Gesamtsumme der Positionen den Nachlass abziehen if (Func.IsNumeric(tbxNachlass.Text, true) & tbxNachlass.Text != "" & cobNachlass.SelectedIndex == 0) // Prozent { sum = sum - (sum * decimal.Parse(tbxNachlass.Text) / 100); } else if (Func.IsNumeric(tbxNachlass.Text, true) & tbxNachlass.Text != "") { sum = sum - decimal.Parse(tbxNachlass.Text); } // Zu der Gesamtsumme der Positionen die MwSt hinzurechnen. //if (cobMwSt.SelectedIndex == 0) //{ // sum = sum * 0.19m + sum; //} sum = sum * (Decimal)cobMwSt.SelectedValue + sum; // Rechnung mit Gesamtbetrag updaten. rechnung.Gesamtbetrag = sum; dbContext.SubmitChanges(); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } dgrPositionen.DataSource = Func.LoadAuftragPositionenUebersicht(); GeneratePosNr(); selectedRows = 0; btnEdit.Enabled = false; this.Cursor = Cursors.WaitCursor; PrintManager.PrintDirectlyWithDialog(EReports.Rechnung, new List<int>() { 1, rechnung.RechnungID }); this.Cursor = Cursors.Default; } }