quotes including discounts

pull/1/head
Sascha Woitschetzki 2021-06-21 10:32:01 +07:00
parent 81480d4975
commit 31b649edf4
5 changed files with 79 additions and 39 deletions

@ -33,18 +33,18 @@ namespace Gremlin.Operations
StringBuilder texFile = new($"\\documentclass[a4paper,ngerman,parskip,10pt]{{scrlttr2}}" + $"\\usepackage{{lmodern}}" + $"\\usepackage[T1]{{fontenc}}" + $"\\usepackage[utf8]{{inputenc}}" + $"\\usepackage{{babel}}" + $"\\usepackage[hidelinks]{{hyperref}}\n");
_ = texFile.AppendLine($"\\usepackage[left={rand}cm, right={rand}cm, top={rand}cm, bottom={rand}cm]{{geometry}}");
_ = texFile.AppendLine($"\\usepackage[table]{{xcolor}}\r\n\\usepackage[right]{{eurosym}}\r\n\\usepackage[locale=DE]{{siunitx}}\r\n\\usepackage{{scrlayer-scrpage}}\r\n\\usepackage{{lastpage}}\r\n\\usepackage{{graphicx}}\r\n\\usepackage{{multirow}}\r\n\\usepackage{{longtable}}\r\n\\usepackage{{enumitem}}\r\n\\usepackage{{fp, xstring, spreadtab, numprint}}\r\n\\DeclareSIUnit{{\\sieuro}}{{\\mbox{{\\euro}}}}");
_ = texFile.AppendLine($"\\usepackage[table]{{xcolor}}\n\\usepackage[right]{{eurosym}}\n\\usepackage[locale=DE]{{siunitx}}\n\\usepackage{{scrlayer-scrpage}}\n\\usepackage{{lastpage}}\n\\usepackage{{graphicx}}\n\\usepackage{{multirow}}\n\\usepackage{{longtable}}\n\\usepackage{{enumitem}}\n\\usepackage{{fp, xstring, spreadtab, numprint}}\n\\DeclareSIUnit{{\\sieuro}}{{\\mbox{{\\euro}}}}");
_ = texFile.AppendLine($"\\rohead{{{quoteVM.QuoteNumber}}}");
_ = texFile.AppendLine("\\cfoot{Seite \\thepage/\\pageref{LastPage}}\n" + "\\sisetup{round-integer-to-decimal,round-precision=2,round-mode=places}" + "\n\\newcommand{\\produkttitel}[1]{\\textsc{#1}}" + "\n\\renewcommand{\\arraystretch}{1.2}\r\n\\definecolor{AgilentBlau}{HTML}{0085d5}" + "\n\\setlist{noitemsep}\r\n\\begin{document}" + "\n\\begin{tabular}{p{0.4\\hsize}p{0.5\\hsize}}" + "\n\\multirow{4}{*}{\\includegraphics[width=0.9\\hsize]{agilentLogo.png}}" + "\n&\\normalsize{Agilent Technologies Sales \\& Services GmbH \\& Co.KG}\\\\" + "\n&\\normalsize{Life Sciences \\& Chemical Analysis}\\\\" + $"\n&\\normalsize{{Hewlett-Packard-Str. 8}}\\\\" + "\n&\\normalsize{D-76337 Waldbronn}" + "\n\\end{tabular}" + "\n\\par\r\n\\begin{flushright}" + "\n\\colorbox{AgilentBlau}{\\textcolor{white}{\\textsc{\\Huge{Angebot}}}}\r\n\\end{flushright}\r\n\\begin{tabular}{p{0.4\\hsize}p{0.6\\hsize}}" + "\n&\n\\multirow{4}{*}{" + "\n\\begin{tabular}{|ll|}" + "\n\\hline");
_ = texFile.AppendLine("\\cfoot{Seite \\thepage/\\pageref{LastPage}}\n" + "\\sisetup{round-integer-to-decimal,round-precision=2,round-mode=places}" + "\n\\newcommand{\\produkttitel}[1]{\\textsc{#1}}" + "\n\\renewcommand{\\arraystretch}{1.2}\n\\definecolor{AgilentBlau}{HTML}{0085d5}" + "\n\\setlist{noitemsep}\n\\begin{document}" + "\n\\begin{tabular}{p{0.4\\hsize}p{0.5\\hsize}}" + "\n\\multirow{4}{*}{\\includegraphics[width=0.9\\hsize]{agilentLogo.png}}" + "\n&\\normalsize{Agilent Technologies Sales \\& Services GmbH \\& Co.KG}\\\\" + "\n&\\normalsize{Life Sciences \\& Chemical Analysis}\\\\" + $"\n&\\normalsize{{Hewlett-Packard-Str. 8}}\\\\" + "\n&\\normalsize{D-76337 Waldbronn}" + "\n\\end{tabular}" + "\n\\par\n\\begin{flushright}" + "\n\\colorbox{AgilentBlau}{\\textcolor{white}{\\textsc{\\Huge{Angebot}}}}\n\\end{flushright}\n\\begin{tabular}{p{0.4\\hsize}p{0.6\\hsize}}" + "\n&\n\\multirow{4}{*}{" + "\n\\begin{tabular}{|ll|}" + "\n\\hline");
_ = texFile.AppendLine($"\\textbf{{Angebotsnummer:}}&{quoteVM.QuoteNumber}\\\\");
_ = texFile.Append($"Angebotdatum:&\\today\\\\\r\nAngebotsgültigkeit:&{quoteVM.Validity} Tage\\\\");
_ = texFile.Append($"Angebotdatum:&\\today\\\\\nAngebotsgültigkeit:&{quoteVM.Validity} Tage\\\\");
_ = texFile.AppendLine($"\\textbf{{Ansprechpartner:}}&{RUSettingModel.GetSettingValue(Properties.Settings.Default.userSettingID, "userName")}\\\\");
_ = texFile.AppendLine($"Telefon: &{RUSettingModel.GetSettingValue(Properties.Settings.Default.userSettingID, "userPhone")}\\\\");
_ = texFile.AppendLine($"Mobil:&{RUSettingModel.GetSettingValue(Properties.Settings.Default.userSettingID, "userMobile")}\\\\");
_ = texFile.AppendLine($"E-Mail:&\\href{{mailto:{RUSettingModel.GetSettingValue(Properties.Settings.Default.userSettingID, "userMail")}}}{{{RUSettingModel.GetSettingValue(Properties.Settings.Default.userSettingID, "userMail")}}}\\\\");
_ = texFile.AppendLine("\\textbf{Auftragsannahme:}&\\href{mailto:salesservices\\_germany@agilent.com}{salesservices\\_germany@agilent.com}\\\\\r\n\\hline\r\n\\end{tabular}\r\n}\\\\");
_ = texFile.AppendLine("\\textbf{Auftragsannahme:}&\\href{mailto:salesservices\\_germany@agilent.com}{salesservices\\_germany@agilent.com}\\\\\n\\hline\n\\end{tabular}\n}\\\\");
if (quoteVM.Recipient != null) _ = texFile.Append(ContactVM.CreateBriefkopf(quoteVM.Recipient, true));
_ = texFile.AppendLine("&\\\\\r\n&\\\\\r\n\\end{tabular}\r\n\\vspace{1cm}\\par ");
_ = texFile.AppendLine("&\\\\\n&\\\\\n\\end{tabular}\n\\vspace{1cm}\\par ");
//Anrede
_ = quoteVM.Recipient.Gender == (byte)Gender.Male
@ -66,9 +66,18 @@ namespace Gremlin.Operations
if (quoteVM.SinglePrices == true)
{
//mit Einzelpreisen
_ = texFile.AppendLine("{| cp{0.71\\textwidth} cr |} \\hline");
_ = texFile.AppendLine(@"\textbf{\#} & \textbf{Produktbeschreibung} (Produktnummer) & \textbf{Menge} & \textbf{Preis}\\ \hline \endhead");
if (quoteVM.ShowDiscounts == false)
{
//mit Einzelpreisen
_ = texFile.AppendLine("{| cp{0.71\\textwidth} cr |} \\hline");
_ = texFile.AppendLine(@"\textbf{\#} & \textbf{Produktbeschreibung} (Produktnummer) & \textbf{Menge} & \textbf{Preis}\\ \hline \endhead");
}
else if (quoteVM.ShowDiscounts == true)
{
//mit Einzelpreisen und Discounts
_ = texFile.AppendLine("{| cp{0.595\\textwidth} crr |} \\hline");
_ = texFile.AppendLine(@"\textbf{\#} & \textbf{Produktbeschreibung} (Produktnummer) & \textbf{Menge} & \textbf{Discount} & \textbf{Preis}\\ \hline \endhead");
}
}
else
{
@ -77,29 +86,46 @@ namespace Gremlin.Operations
_ = texFile.AppendLine(@"\textbf{\#} & \textbf{Produktbeschreibung} (Produktnummer) & \textbf{Menge}\\ \hline \endhead");
}
foreach (LineItemVM lineItemVM in quoteVM.LineItemsVM)
foreach (LineItemVM lI in quoteVM.LineItemsVM)
{
string lineItemTex = "";
if (quoteVM.SinglePrices == true)
{
//mit Einzelpreisen
lineItemTex = lineItemVM.OptionNumber != ""
? $"{lineItemVM.Position} &\\textbf{{{lineItemVM.CustomDescription.Heading}}} ({lineItemVM.ProductNumber}\\#{lineItemVM.OptionNumber})\\newline {lineItemVM.CustomDescription.DescriptionText}&{lineItemVM.Amount}&\\SI{{{lineItemVM.CalcTotalNet}}}{{\\sieuro}}\\\\"
: $"{lineItemVM.Position} &\\textbf{{{lineItemVM.CustomDescription.Heading}}} ({lineItemVM.ProductNumber})\\newline {lineItemVM.CustomDescription.DescriptionText}&{lineItemVM.Amount}&\\SI{{{lineItemVM.CalcTotalNet}}}{{\\sieuro}}\\\\";
if (quoteVM.ShowDiscounts == false)
{
//mit Einzelpreisen
lineItemTex = lI.OptionNumber != ""
? $"{lI.Position} &\\textbf{{{lI.CustomDescription.Heading}}} ({lI.ProductNumber}\\#{lI.OptionNumber})\\newline {lI.CustomDescription.DescriptionText}&{lI.Amount}&\\SI{{{lI.CalcTotalNet}}}{{\\sieuro}}\\\\"
: $"{lI.Position} &\\textbf{{{lI.CustomDescription.Heading}}} ({lI.ProductNumber})\\newline {lI.CustomDescription.DescriptionText}&{lI.Amount}&\\SI{{{lI.CalcTotalNet}}}{{\\sieuro}}\\\\";
}
else if (quoteVM.ShowDiscounts == true)
{
//mit Einzelpreisen und Discounts
lineItemTex = lI.OptionNumber != ""
? $"{lI.Position} &\\textbf{{{lI.CustomDescription.Heading}}} ({lI.ProductNumber}\\#{lI.OptionNumber})\\newline {lI.CustomDescription.DescriptionText}\\newline Listenpreis: \\SI{{{lI.ListPrice}}}{{\\sieuro}}&{lI.Amount}&\\SI{{{lI.TotalDiscount}}}{{\\%}}&\\SI{{{lI.CalcTotalNet}}}{{\\sieuro}}\\\\"
: $"{lI.Position} &\\textbf{{{lI.CustomDescription.Heading}}} ({lI.ProductNumber})\\newline {lI.CustomDescription.DescriptionText}\\newline Listenpreis: \\SI{{{lI.ListPrice}}}{{\\sieuro}}&{lI.Amount}&\\SI{{{lI.TotalDiscount}}}{{\\%}}&\\SI{{{lI.CalcTotalNet}}}{{\\sieuro}}\\\\";
}
}
else if (quoteVM.SinglePrices == false)
{
//ohne Einzelpreise
lineItemTex = lineItemVM.OptionNumber != ""
? $"{lineItemVM.Position} &\\textbf{{{lineItemVM.CustomDescription.Heading}}} ({lineItemVM.ProductNumber}\\#{lineItemVM.OptionNumber})\\newline {lineItemVM.CustomDescription.DescriptionText}&{lineItemVM.Amount}\\\\"
: $"{lineItemVM.Position} &\\textbf{{{lineItemVM.CustomDescription.Heading}}} ({lineItemVM.ProductNumber})\\newline {lineItemVM.CustomDescription.DescriptionText}&{lineItemVM.Amount}\\\\";
lineItemTex = lI.OptionNumber != ""
? $"{lI.Position} &\\textbf{{{lI.CustomDescription.Heading}}} ({lI.ProductNumber}\\#{lI.OptionNumber})\\newline {lI.CustomDescription.DescriptionText}&{lI.Amount}\\\\"
: $"{lI.Position} &\\textbf{{{lI.CustomDescription.Heading}}} ({lI.ProductNumber})\\newline {lI.CustomDescription.DescriptionText}&{lI.Amount}\\\\";
}
_ = texFile.Append(lineItemTex + "\n");
}
_ = texFile.AppendLine("\\hline\r\n\\end{longtable}\r\n\\end{center}\r\n\\vspace{-2cm}\r\n\\begin{flushright}\r\n\\begin{large}\r\n\\begin{tabular}{|rr|}\r\n\\hline");
_ = texFile.AppendLine("\\hline\n"
+ "\\end{longtable}\n"
+ "\\end{center}\n");
_ = texFile.AppendLine("\\vspace{-2cm}\n"
+ "\\begin{flushright}\n\n"
+ "\\begin{tabular}{|rr|}\n"
+ "\\hline");
//Gesamtsumme
_ = texFile.AppendLine($"\\textbf{{Gesamtsumme netto}} & \\SI{{{quoteVM.TotalNet}}}{{\\sieuro}}\\\\");
@ -111,8 +137,8 @@ namespace Gremlin.Operations
_ = texFile.AppendLine($"\\textbf{{Gesamtsumme brutto}} & \\SI{{{(float)quoteVM.TotalNet * (1 + (quoteVM.VAT / 100))}}}{{\\sieuro}}\\\\");
}
_ = texFile.Append("\\hline\r\n\\end{tabular}\r\n\\end{large}\r\n\\end{flushright}\r\n\r\nDer Betrag versteht sich zzgl. der gesetzlichen Steuern.\\\\\r\nDiese werden im Rechnungszeitraum auf der Rechnung gesondert ausgewiesen.\\\\\r\nZahlungsbedingungen: 30 Tage netto ab Rechnungsdatum.\\\\\r\nIncoterm (2010) für Lieferungen innerhalb Deutschlands: DDP.\r\n\\begin{small}\r\n\r\n");
_ = texFile.AppendLine($"\\textbf{{Gewährleistung:}}\\\\\r\nDie Gewährleistung für Zubehör und Ersatzteilprodukte und für Analytik-Hardwareprodukte beträgt {quoteVM.Warranty} Monate.\r\n");
_ = texFile.Append("\\hline\n\\end{tabular}\n\n\\end{flushright}\n\nDer Betrag versteht sich zzgl. der gesetzlichen Steuern.\\\\\nDiese werden im Rechnungszeitraum auf der Rechnung gesondert ausgewiesen.\\\\\nZahlungsbedingungen: 30 Tage netto ab Rechnungsdatum.\\\\\nIncoterm (2010) für Lieferungen innerhalb Deutschlands: DDP.\n\\begin{small}\n\n");
_ = texFile.AppendLine($"\\textbf{{Gewährleistung:}}\\\\\nDie Gewährleistung für Zubehör und Ersatzteilprodukte und für Analytik-Hardwareprodukte beträgt {quoteVM.Warranty} Monate.\n");
//3PP-Disclaimer
if (quoteVM.QuoteContains3PP)
@ -120,7 +146,7 @@ namespace Gremlin.Operations
_ = texFile.AppendLine(Create3PPDisclaimer(quoteVM));
}
_ = texFile.AppendLine("\\textbf{Hinweis:}\\\\ \r\nFür den Verkauf der in diesem Angebot aufgeführten Standard-Produkte und -Services gelten die aktuellen \\emph{Agilent Geschäftsbedingungen} und alle sonstigen anwendbaren Zusatzbedingungen sowie zusätzliche Bedingungen, soweit darauf hier Bezug genommen wird. Soweit Produkte oder Services nach speziellen Kundenanforderungen hergestellt, konfiguriert oder angepasst werden, gelten für den Verkauf aller in diesem Angebot aufgeführten Produkte und Services die aktuellen \\emph{Agilent Geschäftsbedingungen für kundenspezifische Produkte} und alle sonstigen anwendbaren Zusatzbedingungen sowie zusätzliche Bedingungen, soweit darauf hier Bezug genommen wird. Eine Kopie der maßgeblichen Bedingungen ist entweder beigefügt oder wurde Ihnen bereits zur Verfügung gestellt. Sollten Sie keine Kopie erhalten haben oder eine weitere Kopie benötigen, setzen Sie sich bitte mit uns in Verbindung. Soweit Sie mit Agilent eine gesonderte Vereinbarung getroffen haben, die den Verkauf der in diesem Angebot aufgeführten Produkte und Services umfasst, sind die Bestimmungen dieser Vereinbarung anwendbar. Abweichende oder ergänzende Vereinbarungen, insbesondere widersprechende Geschäftsbedingungen, sind nur gültig, wenn sie ausdrücklich schriftlich vereinbart worden sind. Die angegebenen Daten zur Verfügbarkeit von Produkten und Services sind vorläufig. Die tatsächlichen Lieferzeiten bzw. Lieferperioden werden Ihnen bei Auftragsbestätigung mitgeteilt. Waren, Technologien oder Software, die aus den Vereinigten Staaten von Amerika (\\emph{USA}) oder anderen exportierenden Ländern ausgeführt werden, unterliegen den Ausfuhrbestimmungen der USA sowie anderer Rechtsordnungen. Bei Ausfuhr ist der Kunde dafür verantwortlich, dass die anwendbaren Ausfuhrbestimmungen eingehalten werden.\r\n\\end{small}\r\n \r\n\\begin{scriptsize}\r\nAgilent Technologies Sales \\& Services GmbH \\& Co. KG, Hewlett-Packard-Str. 8, 76337 Waldbronn\\\\\r\nSitz der Gesellschaft: Waldbronn, Amtsgericht: Mannheim, HRA 706631, WEEE-Reg.-Nr. DE 86631749\\\\\r\nPersönlich haftende Gesellschafterin: Agilent Technologies Sales \\& Services Verwaltungs-GmbH, Hewlett-Packard-Str. 8, 76337 Waldbronn\\\\\r\nSitz der persönlich haftenden Gesellschafterin: Waldbronn, Amtsgericht Mannheim, HRB 723773\\\\\r\nGeschäftsführer: Armin Jehle\r\n\\href{www.agilent.com}{www.agilent.com}\r\n\\end{scriptsize}\r\n\\end{document}");
_ = texFile.AppendLine("\\textbf{Hinweis:}\\\\ \nFür den Verkauf der in diesem Angebot aufgeführten Standard-Produkte und -Services gelten die aktuellen \\emph{Agilent Geschäftsbedingungen} und alle sonstigen anwendbaren Zusatzbedingungen sowie zusätzliche Bedingungen, soweit darauf hier Bezug genommen wird. Soweit Produkte oder Services nach speziellen Kundenanforderungen hergestellt, konfiguriert oder angepasst werden, gelten für den Verkauf aller in diesem Angebot aufgeführten Produkte und Services die aktuellen \\emph{Agilent Geschäftsbedingungen für kundenspezifische Produkte} und alle sonstigen anwendbaren Zusatzbedingungen sowie zusätzliche Bedingungen, soweit darauf hier Bezug genommen wird. Eine Kopie der maßgeblichen Bedingungen ist entweder beigefügt oder wurde Ihnen bereits zur Verfügung gestellt. Sollten Sie keine Kopie erhalten haben oder eine weitere Kopie benötigen, setzen Sie sich bitte mit uns in Verbindung. Soweit Sie mit Agilent eine gesonderte Vereinbarung getroffen haben, die den Verkauf der in diesem Angebot aufgeführten Produkte und Services umfasst, sind die Bestimmungen dieser Vereinbarung anwendbar. Abweichende oder ergänzende Vereinbarungen, insbesondere widersprechende Geschäftsbedingungen, sind nur gültig, wenn sie ausdrücklich schriftlich vereinbart worden sind. Die angegebenen Daten zur Verfügbarkeit von Produkten und Services sind vorläufig. Die tatsächlichen Lieferzeiten bzw. Lieferperioden werden Ihnen bei Auftragsbestätigung mitgeteilt. Waren, Technologien oder Software, die aus den Vereinigten Staaten von Amerika (\\emph{USA}) oder anderen exportierenden Ländern ausgeführt werden, unterliegen den Ausfuhrbestimmungen der USA sowie anderer Rechtsordnungen. Bei Ausfuhr ist der Kunde dafür verantwortlich, dass die anwendbaren Ausfuhrbestimmungen eingehalten werden.\n\\end{small}\n \n\\begin{scriptsize}\nAgilent Technologies Sales \\& Services GmbH \\& Co. KG, Hewlett-Packard-Str. 8, 76337 Waldbronn\\\\\nSitz der Gesellschaft: Waldbronn, Amtsgericht: Mannheim, HRA 706631, WEEE-Reg.-Nr. DE 86631749\\\\\nPersönlich haftende Gesellschafterin: Agilent Technologies Sales \\& Services Verwaltungs-GmbH, Hewlett-Packard-Str. 8, 76337 Waldbronn\\\\\nSitz der persönlich haftenden Gesellschafterin: Waldbronn, Amtsgericht Mannheim, HRB 723773\\\\\nGeschäftsführer: Armin Jehle\n\\href{www.agilent.com}{www.agilent.com}\n\\end{scriptsize}\n\\end{document}");
return texFile;
}
@ -131,7 +157,7 @@ namespace Gremlin.Operations
string rbDisclaimer = "\\textbf{Wichtiger Hinweis zur Bestellung von überholten Geräten}\\\\\n";
rbDisclaimer += "Bitte beachten Sie, dass in der Regel nur wenige gebrauchte Geräte auf Lager sind und diese ohne die Möglichkeit einer Reservierung auf „first come, first serve“-Basis verkauft werden. Um lange Lieferzeiten zu vermeiden, sollte daher bei konkretem Interesse zunächst der Lagerstand überprüft werden. Die aktuellen Lagerbestände sind:\n";
List<LineItemVM> lineItemsWithRB = quoteVM.LineItemsVM.Where(lI => lI.ProductLine == "RB").ToList();
rbDisclaimer += "\\begin{center}\n\\begin{tabular}{clc}\n";
rbDisclaimer += "\\textbf{Modul} & \\textbf{Beschreibung} &\\textbf{Bestand}\\\\ \\hline \n";
@ -217,7 +243,7 @@ namespace Gremlin.Operations
coverLetter += "\\end{itemize}\n";
}
coverLetter += $"\\end{{itemize}}\r\n"
coverLetter += $"\\end{{itemize}}\n"
+ "Für Rückfragen und Änderungswünsche stehe ich Ihnen gerne zur Verfügung.\\par\n"
+ "Mit freundlichen Grüßen\\\\\n"
+ "\\includegraphics[width = 5cm]{signWoitschetzki.png}\n"

@ -84,6 +84,7 @@
<StackPanel x:Name="Opp" Grid.Row="0" Grid.Column="2" Orientation="Vertical">
<CheckBox d:DataContext="{d:DesignInstance Type=viewmodels:QuoteVM}" x:Name="cbBrutto" Content="Brutto anzeigen" Margin="10,5,10,5" IsChecked="{Binding Path=Brutto, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Click="CbBrutto_Click"/>
<CheckBox x:Name="cbSinglePrices" Content="Einzelpreise ausweisen" Margin="10,5,10,5" IsChecked="True" Click="CbSinglePrices_Click" />
<CheckBox x:Name="cbShowDiscounts" Content="Discounts ausweisen" Margin="10,5,10,5" IsChecked="True" Click="CbShowDiscounts_Click"/>
<CheckBox x:Name="cbBrochure" Content="Broschüren anhängen" Margin="10,5,10,5" Click="CbBrochure_Click" />
<CheckBox x:Name="cbDataSheets" Content="Datenblätter anhängen" Margin="10,5,10,5" Click="CbDataSheets_Click" />
<CheckBox x:Name="cbMailTemplate" Content="Mail aus Template erstellen" Margin="10,5,10,5" Click="CbMailTemplate_Click" />

@ -70,9 +70,12 @@ namespace Gremlin.GremlinUI
cbDataSheets.IsChecked,
cbMailTemplate.IsChecked,
tbQuotePath.Text,
validity
validity,
cbShowDiscounts.IsChecked
);
if (quoteVM == null) return;
ObservableCollection<LineItemVM> lineItemsViewModel = new(quoteVM.LineItemsVM);
lineItems = new(lineItemsViewModel);
UpdateUI();
@ -155,5 +158,10 @@ namespace Gremlin.GremlinUI
{
quoteVM.MailTemplate = cbMailTemplate.IsChecked;
}
private void CbShowDiscounts_Click(object sender, RoutedEventArgs e)
{
quoteVM.ShowDiscounts = cbMailTemplate.IsChecked;
}
}
}

@ -8,13 +8,13 @@ namespace Gremlin.GremlinUI.ViewModels
internal class LineItemVM : BaseVM
{
public ushort Position { get; private set; }
public ushort Amount { get; set; }
public ushort Amount { get; internal set; }
public string ProductNumber { get; private set; }
public string OptionNumber { get; private set; }
public string SapShortDescription { get; private set; }
public CustomDescriptionVM CustomDescription { get; private set; }
public string ProductLine { get; private set; }
public decimal TotalDiscount { get; set; }
public decimal TotalDiscount { get; internal set; }
//public decimal SalesDiscount { get; set; }
//public decimal PromotionalDiscount { get; set; }
//public decimal ContractualDiscount { get; set; }

@ -9,28 +9,29 @@ namespace Gremlin.GremlinUI.ViewModels
internal class QuoteVM : BaseVM
{
public List<LineItemVM> LineItemsVM { get; private set; }
public ContactVM Recipient { get; set; }
public ContactVM Recipient { get; internal set; }
public ContactVM SalesRep { get; private set; }
public string QuoteNumber { get; set; }
public string QuoteType { get; set; }
public string QuotePath { get; set; }
public int Warranty { get; set; }
public int Validity { get; set; }
public string QuoteNumber { get; internal set; }
public string QuoteType { get; internal set; }
public string QuotePath { get; internal set; }
public int Warranty { get; internal set; }
public int Validity { get; internal set; }
public decimal TotalListprice { get; private set; }
public decimal AverageDiscount { get; private set; }
public decimal TotalNet { get; private set; }
public float VAT { get; private set; }
public bool? Brutto { get; set; }
public bool? SinglePrices { get; set; }
public bool? Brochures { get; set; }
public bool? DataSheets { get; set; }
public bool? MailTemplate { get; set; }
public bool? Brutto { get; internal set; }
public bool? SinglePrices { get; internal set; }
public bool? Brochures { get; internal set; }
public bool? DataSheets { get; internal set; }
public bool? MailTemplate { get; internal set; }
public bool QuoteContains3PP { get; private set; }
public bool QuoteContainsRB { get; private set; }
public bool? ShowDiscounts { get; internal set; }
internal QuoteVM() { }
private QuoteVM(string quoteNumber, string quoteType, ContactVM recipient, ContactVM salesRep, bool? brutto, float vAT, int warranty, int validity, string quotePath, bool? singlePrices, bool? brochures, bool? dataSheets, bool? mailTemplate)
private QuoteVM(string quoteNumber, string quoteType, ContactVM recipient, ContactVM salesRep, bool? brutto, float vAT, int warranty, int validity, string quotePath, bool? singlePrices, bool? brochures, bool? dataSheets, bool? mailTemplate, bool? showDiscounts)
{
QuoteNumber = quoteNumber;
QuoteType = quoteType;
@ -45,17 +46,21 @@ namespace Gremlin.GremlinUI.ViewModels
Brochures = brochures;
DataSheets = dataSheets;
MailTemplate = mailTemplate;
ShowDiscounts = showDiscounts;
}
internal static QuoteVM CreateQuote(string quoteNumber, ContactVM recipient, ContactVM salesRep, float vAT = 19f, string quoteType = "ein Analysegerät", bool? brutto = true, int warranty = 12, bool? singlePrices = true, bool? brochures = true, bool? dataSheets = true, bool? mailTemplate = true, string quotePath = "", int validity = 60)
internal static QuoteVM CreateQuote(string quoteNumber, ContactVM recipient, ContactVM salesRep, float vAT = 19f, string quoteType = "ein Analysegerät", bool? brutto = true, int warranty = 12, bool? singlePrices = true, bool? brochures = true, bool? dataSheets = true, bool? mailTemplate = true, string quotePath = "", int validity = 60, bool? showDiscounts = true)
{
decimal totalListprice = 0, totalDiscount = 0, calcTotalNet = 0;
bool quoteContains3PP = false, quoteContainsRB = false;
QuoteVM quoteVM = new(quoteNumber, quoteType, recipient, salesRep, brutto, vAT, warranty, validity, quotePath, singlePrices, brochures, dataSheets, mailTemplate);
QuoteVM quoteVM = new(quoteNumber, quoteType, recipient, salesRep, brutto, vAT, warranty, validity, quotePath, singlePrices, brochures, dataSheets, mailTemplate, showDiscounts);
quoteVM.LineItemsVM = new();
ObservableCollection<LineItemVM> lineItemsVM = LineItemVM.ReadLineItemsFromClipboard();
if (lineItemsVM == null) return null;
foreach (LineItemVM lineItemVM in lineItemsVM)
{
totalListprice += lineItemVM.ListPrice;