CustomDescription without ProductId

pull/1/head
Sascha Woitschetzki 2023-06-28 17:21:11 +07:00 committed by Sascha
parent efeefcc842
commit fed1ce9f66
17 changed files with 544 additions and 83 deletions

@ -175,7 +175,7 @@ public class ProductConfiguration : IEntityTypeConfiguration<Product> {
productEntity.HasKey(e => e.ProductId);
productEntity.HasOne(p => p.ProductLine).WithMany(d => d.Products).HasForeignKey(fk => fk.ProductLineCode).OnDelete(DeleteBehavior.Restrict);
productEntity.HasOne(p => p.CustomDescription).WithOne(cD => cD.Product).HasForeignKey<CustomDescription>(cD => cD.ProductId);
// productEntity.HasOne(p => p.CustomDescription).WithOne(cD => cD.Product).HasForeignKey<CustomDescription>(cD => cD.ProductId);
// productEntity.HasMany(p => p.LineItems).WithOne(lI => lI.Product).HasForeignKey(fK => fK.ProductId);

@ -7,12 +7,11 @@ public class CustomDescription : IMetadata {
public uint CustomDescriptionId { get; set; }
//foreign keys:
public uint ProductId { get; set; }
public uint AccountId { get; set; }
public uint SupplierId { get; set; }
// public uint ProductId { get; set; } = 1;
public uint AccountId { get; set; } = 1;
//navigation properties:
public Product? Product { get; set; }
// public Product? Product { get; set; }
public Account? Supplier { get; set; }
//class properties:

@ -55,6 +55,12 @@
</EditTemplate>
</DataGridColumn>
@* <DataGridColumn Field="@nameof(CustomDescription.ProductId)" Caption="ProductId" Filterable Sortable Editable> *@
@* <EditTemplate> *@
@* <NumericEdit TValue="uint" Value="(uint)context.CellValue" ValueChanged="v => context.CellValue = v"/> *@
@* </EditTemplate> *@
@* </DataGridColumn> *@
</DataGridColumns>
<ButtonRowTemplate>

@ -1,3 +1,4 @@
using System.Diagnostics;
using System.Security.Claims;
using Blazorise;
using Blazorise.DataGrid;
@ -17,15 +18,13 @@ public partial class CustomDescriptions {
protected override async Task OnInitializedAsync() {
if (AuthenticationStateTask != null) {
ClaimsPrincipal user = (await AuthenticationStateTask).User;
if (user.Identity is { IsAuthenticated: true }) customDescriptions = GenericController.GetAll<CustomDescription>("Supplier");
if (user.Identity is { IsAuthenticated: true }) customDescriptions = await GenericController.GetAllAsync<CustomDescription>();
await base.OnInitializedAsync();
}
}
private void OnSelectedCustomDescriptionChanged(CustomDescription selectedCustomDescription) {
this.selectedCustomDescription = selectedCustomDescription;
}
private void OnSelectedCustomDescriptionChanged(CustomDescription newSelectedCustomDescription) => selectedCustomDescription = newSelectedCustomDescription;
private async Task OnImportCustomDescriptions(FileChangedEventArgs fileChangedEventArgs) {
try {
@ -41,35 +40,36 @@ public partial class CustomDescriptions {
catch (Exception exception) {
Console.WriteLine(exception.Message);
}
StateHasChanged();
}
private async Task OnRowInsertedAsync(SavedRowItem<CustomDescription, Dictionary<string, object>> customDescription) {
CustomDescription newCustomDescription = ResolveCustomDescriptionAsync(customDescription.Item);
if (newCustomDescription.ProductNumber == null || newCustomDescription.OptionNumber == null)
return;
CustomDescription newCustomDescription = await ResolveCustomDescriptionAsync(customDescription.Item);
int count = await GenericController.InsertAsync(newCustomDescription);
Console.WriteLine($"Inserted {count} properties for new custom description {newCustomDescription.ProductNumber}#{newCustomDescription.OptionNumber}: {newCustomDescription.Heading}");
}
private async Task OnRowUpdatedAsync(SavedRowItem<CustomDescription, Dictionary<string, object>> customDescription) {
CustomDescription newCustomDescription = ResolveCustomDescriptionAsync(customDescription.Item);
if (newCustomDescription.ProductNumber == null || newCustomDescription.OptionNumber == null)
return;
CustomDescription newCustomDescription = await ResolveCustomDescriptionAsync(customDescription.Item);
int count = await GenericController.UpdateAsync(customDescription.Item);
Console.WriteLine($"Updated {count} properties for custom description {newCustomDescription.ProductNumber}#{newCustomDescription.OptionNumber}: {newCustomDescription.Heading}");
}
private async Task OnRowRemovedAsync(CustomDescription customDescription) {
private static async Task OnRowRemovedAsync(CustomDescription customDescription) {
int count = await GenericController.RemoveAsync(customDescription);
Console.WriteLine($"Removed {count} properties and custom description {customDescription.ProductNumber}#{customDescription.OptionNumber}: {customDescription.Heading}");
}
private CustomDescription ResolveCustomDescriptionAsync(CustomDescription newCustomDescription) {
newCustomDescription.Supplier = GenericController.Get<Account>(a => a.AccountId.Equals(newCustomDescription.AccountId));
private static async Task<CustomDescription> ResolveCustomDescriptionAsync(CustomDescription newCustomDescription) {
// IList<Product> products = await GenericController.GetAllAsync<Product>(p => p.ProductNumber == newCustomDescription.ProductNumber);
// if (products is not null && products.Count > 0)
// newCustomDescription.ProductId = products[0].ProductId;
// else
// Debug.WriteLine($"Found no product with ProductId {newCustomDescription.ProductNumber}");
newCustomDescription.DataModificationByUser = "Gremlin Blazor Server GUI";
newCustomDescription.DataVersionNumber++;
return newCustomDescription;
}
}

@ -37,43 +37,23 @@ public partial class QuoteDebug {
Debug.WriteLine(await GenericController.InsertAsync(quote) > 0 ? "Wrote Quote to db." : "Error on writing Quote to db!");
}
private Task OnDescriptionChanged() {
throw new NotImplementedException();
}
private Task OnDescriptionChanged() => throw new NotImplementedException();
private Task OnQuotationNumberChanged() {
throw new NotImplementedException();
}
private Task OnQuotationNumberChanged() => throw new NotImplementedException();
private Task OnWarrantyChanged() {
throw new NotImplementedException();
}
private Task OnWarrantyChanged() => throw new NotImplementedException();
private Task OnValidForChanged() {
throw new NotImplementedException();
}
private Task OnValidForChanged() => throw new NotImplementedException();
private Task OnVATChanged() {
throw new NotImplementedException();
}
private Task OnVATChanged() => throw new NotImplementedException();
private Task OnIsPriceInformationChanged() {
throw new NotImplementedException();
}
private Task OnIsPriceInformationChanged() => throw new NotImplementedException();
private Task OnShowBruttoChanged() {
throw new NotImplementedException();
}
private Task OnShowBruttoChanged() => throw new NotImplementedException();
private Task OnShowSinglePricesChanged() {
throw new NotImplementedException();
}
private Task OnShowSinglePricesChanged() => throw new NotImplementedException();
private Task OnShowDiscountsChanged() {
throw new NotImplementedException();
}
private Task OnShowDiscountsChanged() => throw new NotImplementedException();
private Task OnSelectedLineItemChanged() {
throw new NotImplementedException();
}
private Task OnSelectedLineItemChanged() => throw new NotImplementedException();
}

@ -130,7 +130,7 @@ public class GenericController {
gremlinDb.Set<T>().Add(entity);
return await gremlinDb.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException ex) {
catch (DbUpdateException ex) {
HandleConcurrencyExceptions(ex);
return -1;
}
@ -140,26 +140,29 @@ public class GenericController {
}
}
private static void HandleConcurrencyExceptions(DbUpdateConcurrencyException ex) {
private static void HandleConcurrencyExceptions(DbUpdateException ex) {
Debug.WriteLine(ex.InnerException);
foreach (EntityEntry entry in ex.Entries)
if (entry.Entity is Quote) {
PropertyValues proposedValues = entry.CurrentValues;
PropertyValues? databaseValues = entry.GetDatabaseValues();
foreach (IProperty property in proposedValues.Properties) {
object? proposedValue = proposedValues[property];
object? databaseValue = databaseValues[property];
// TODO: decide which value should be written to database
// proposedValues[property] = <>;
foreach (EntityEntry entry in ex.Entries) {
switch (entry.Entity) {
case Quote or CustomDescription: {
PropertyValues proposedValues = entry.CurrentValues;
PropertyValues? databaseValues = entry.GetDatabaseValues();
foreach (IProperty property in proposedValues.Properties) {
object? proposedValue = proposedValues[property];
object? databaseValue = databaseValues[property];
// TODO: decide which value should be written to database
// proposedValues[property] = <>;
}
// Refresh original values to bypass next concurrency check
entry.OriginalValues.SetValues(proposedValues);
break;
}
// Refresh original values to bypass next concurrency check
entry.OriginalValues.SetValues(proposedValues);
}
else {
throw new NotSupportedException("Don't know how to handle concurrency conflicts for " + entry.Metadata.Name);
default:
throw new NotSupportedException("Don't know how to handle concurrency conflicts for " + entry.Metadata.Name);
}
}
}
public static async Task<int> InsertAsync<T>(IEnumerable<T> entities) where T : class, IMetadata {

@ -99,13 +99,13 @@ public class QuoteHandling {
return Task.FromResult(lineItems);
}
private static byte CheckForAcademic(Account account) {
return account.AccountType?.AccountTypeCode == null ? (byte)60 : (byte)(account.AccountType.AccountTypeCode.StartsWith("N") ? 90 : 60);
}
private static byte CheckForAcademic(Account account) => account.AccountType?.AccountTypeCode == null ? (byte)60 : (byte)(account.AccountType.AccountTypeCode.StartsWith("N") ? 90 : 60);
private const decimal maxFreightCost = 2650;
private static decimal GetFreight(decimal net, decimal freight) {
decimal freightNet = net * freight / 100;
return freightNet < 3000 ? freightNet : 3000;
return freightNet < maxFreightCost ? freightNet : maxFreightCost;
}
private static Quote CalculateTotals(Quote quote) {

@ -120,11 +120,12 @@ public static class TexService {
foreach (LineItem lineItem in quote.LineItems) {
string lineItemTex = Empty;
CustomDescription? customDescription = customDescriptions.FirstOrDefault(cD => cD.CustomDescriptionId.Equals(lineItem.CustomDescriptionId));
if (customDescription is null)
lineItemTex = $"{lineItem.Position} &\\textbf{{CustomDescription missing}} ({lineItem.ProductNumber}\\#{lineItem.OptionNumber})\\newline CustomDescription missing&{lineItem.Amount}&\\SI{{{lineItem.Total}}}{{\\sieuro}}\\\\";
else
switch (quote.ShowSinglePrices) {
CustomDescription customDescription = customDescriptions.FirstOrDefault(cD => cD.CustomDescriptionId.Equals(lineItem.CustomDescriptionId)) ?? new();
customDescription.Heading ??= lineItem.SapShortDescription;
customDescription.CoverletterText ??= lineItem.SapShortDescription;
customDescription.DescriptionText ??= lineItem.SapLongDescription;
switch (quote.ShowSinglePrices) {
case true when !quote.ShowDiscounts:
//mit Einzelpreisen
lineItemTex = lineItem.OptionNumber != "" ? $"{lineItem.Position} &\\textbf{{{customDescription.Heading}}} ({lineItem.ProductNumber}\\#{lineItem.OptionNumber})\\newline {customDescription.DescriptionText}&{lineItem.Amount}&\\SI{{{lineItem.Total}}}{{\\sieuro}}\\\\" : $"{lineItem.Position} &\\textbf{{{customDescription.Heading}}} ({lineItem.ProductNumber})\\newline {customDescription.DescriptionText}&{lineItem.Amount}&\\SI{{{lineItem.Total}}}{{\\sieuro}}\\\\";
@ -200,8 +201,6 @@ public static class TexService {
}
private static string Create3PpDisclaimer(Quote quote) {
if (quote.LineItems == null)
return Empty;
string dreipp = "\\textbf{Hinweis zu Non-Agilent-Produkten}\\\\ \n" + "Bitte beachten Sie, dass das/die o.g. Produkt/e ";
@ -225,16 +224,17 @@ public static class TexService {
}
private static string GetCoverletterRow(LineItem lineItem) {
CustomDescription? customDescription = GenericController.Get<CustomDescription>(cD => cD.CustomDescriptionId.Equals(lineItem.CustomDescriptionId));
return customDescription is null ? $"\\item CustomDescription missing (\\#{lineItem.Position})\n" : customDescription.CoverletterText is "" ? customDescription.Heading is null ? Empty : $"\\item {customDescription.Heading} (\\#{lineItem.Position})\n" : customDescription.CoverletterText is null ? Empty : $"\\item {customDescription.CoverletterText} (\\#{lineItem.Position})\n";
CustomDescription customDescription = GenericController.Get<CustomDescription>(cD => cD.CustomDescriptionId.Equals(lineItem.CustomDescriptionId)) ?? new();
customDescription.Heading ??= lineItem.SapShortDescription;
customDescription.CoverletterText ??= lineItem.SapShortDescription;
customDescription.DescriptionText ??= lineItem.SapLongDescription;
return customDescription.CoverletterText is "" or null ? $"\\item {customDescription.Heading} (\\#{lineItem.Position})\n" : $"\\item {customDescription.CoverletterText} (\\#{lineItem.Position})\n";
}
private static Task<string> CreateCoverletter(Quote quote) {
bool subitem = false;
string coverLetter = $"nachfolgend erhalten Sie Ihr gewünschtes Angebot über ein(e) {quote.Description}.\\\\\n" + "Es umfasst im Einzelnen:\n" + "\\begin{itemize}\n";
if (quote.LineItems is null) return Task.FromResult(Empty);
foreach (LineItem lineItem in quote.LineItems) {
if (lineItem.OptionNumber is "") {
//Hauptitem

@ -0,0 +1,169 @@
\documentclass[a4paper,ngerman,parskip,10pt]{scrlttr2}
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage[hidelinks]{hyperref}
\usepackage[left=2cm, right=2cm, top=2cm, bottom=2cm]{geometry}
\usepackage[table]{xcolor}
\usepackage[right]{{eurosym}}
\usepackage[locale=DE]{{siunitx}}
\usepackage{{scrlayer-scrpage}}
\usepackage{{lastpage}}
\usepackage{{graphicx}}
\usepackage{{multirow}}
\usepackage{{longtable}}
\usepackage{{enumitem}}
\usepackage{{fp, xstring, spreadtab, numprint}}
\DeclareSIUnit{{\sieuro}}{{\mbox{{\euro}}}}
\rohead{DE-83PE89-623-243}
\cfoot{Seite \thepage/\pageref{LastPage}}
\sisetup{round-integer-to-decimal,round-precision=2,round-mode=places}
\newcommand{\produkttitel}[1]{\textsc{#1}}
\renewcommand{\arraystretch}{1.2}
\definecolor{AgilentBlau}{HTML}{0085d5}
\setlist{noitemsep}
\begin{document}
\begin{tabular}{p{0.4\hsize}p{0.5\hsize}}
\multirow{4}{*}{\includegraphics[width=0.9\hsize]{agilentLogo.png}}
&\normalsize{Agilent Technologies Deutschland GmbH}\\
&\normalsize{Life Sciences \& Chemical Analysis}\\
&\normalsize{Hewlett-Packard-Str. 8}\\
&\normalsize{D-76337 Waldbronn}
\end{tabular}
\par
\begin{flushright}
\colorbox{AgilentBlau}{\textcolor{white}{\textsc{\Huge{Angebot}}}}
\end{flushright}
\begin{tabular}{p{0.4\hsize}p{0.6\hsize}}
&
\multirow{4}{*}{
\begin{tabular}{|ll|}
\hline
\textbf{Angebotsnummer:}&DE-83PE89-623-243\\
Angebotdatum:&\today\\
Angebotsgültigkeit:&60 Tage\\\textbf{Ansprechpartner:}&Sascha Woitschetzki\\
Telefon: &+49 208 74129134\\
Mobil:&+49 163 9681131\\
E-Mail:&\href{mailto:sascha.woitschetzki@non.agilent.com}{sascha.woitschetzki@non.agilent.com}\\
\textbf{Auftragsannahme:}&\href{mailto:salesservices\_germany@agilent.com}{salesservices\_germany@agilent.com}\\
\hline
\end{tabular}
}\\
Frau Sofia Gonzalez
\\
Caesar \& Loretz GmbH
\\
Röhfeldstr. 46
\\
53227 Bonn
\\
&\\
&\\
\end{tabular}
\vspace{1cm}\par
Sehr geehrte Frau Gonzalez,\par
nachfolgend erhalten Sie Ihr gewünschtes Angebot über ein(e) PrimeLC.\\
Es umfasst im Einzelnen:
\begin{itemize}
\item Flexible Pumpe (max. 800 bar) mit 4 Kanälen, integriertem Entgaser, BlendAssist und ISET (\#1)
\begin{itemize}
\item Werkzeug (\#2)
\item InfinityLab StaySafe Starter-Kit (\#3)
\item Poroshell 120 Säule (\#4)
\end{itemize}
\item CustomDescription missing (\#5)
\item Vialsampler (\#6)
\begin{itemize}
\item Probenteller für 6x11 2,0 ml Vials (\#7)
\item Vorhandene Agilent CDS-Lizenz (\#8)
\end{itemize}
\item Säulenthermostat (\#9)
\item Diodenarraydetektor High Sensitivity (\#10)
\item OpenLAB CDS 2 Workstation Plus mit Software und Lizenzen, PC, Softwarewartungsvertrag: alle Updates und Upgrades, bevorzugter telefonischer Support. Laufzeit: 1 Jahr (\#11)
\begin{itemize}
\item Inkludierte Gerätelizenz (\#12)
\item Inkludierte Gerätelizenz (\#13)
\end{itemize}
\item 1260 Infinity II HPLC-System (\#14)
\begin{itemize}
\item Erweiterte Gewährleistung Plus (3 Jahre) (\#15)
\item Einführung (\#16)
\item Installation and Operational Qualification (\#17)
\end{itemize}
\item OpenLAB CDS WorkStation (\#18)
\begin{itemize}
\item Installation and Operational Qualification (\#19)
\end{itemize}
\end{itemize}
Für Rückfragen und Änderungswünsche stehe ich Ihnen gerne zur Verfügung.\par
Mit freundlichen Grüßen\\
\includegraphics[width = 5cm]{signWoitschetzki.png}
\vspace{1cm} \\
\begin{center}
\begin{longtable}
{| cp{0.71\textwidth} cr |} \hline
\textbf{\#} & \textbf{Produktbeschreibung} (Produktnummer) & \textbf{Menge} & \textbf{Preis}\\ \hline \endhead
1 &\textbf{1260 Infinity II Prime Flexible Pumpe} (G7104C)\newline 1260 Infinity II Prime Flexible Pumpe mit 1290 II Technologie für höchste Präzision und Genauigkeit. \newline Quaternäre Pumpe (bis zu 800 bar und 5 ml/min) mit integriertem Entgaser, Niederdruckmischer, aktiver Kolbenhinterspülung, ISET und BlendAssist.&1&\SI{18981.05}{\sieuro}\\
2 &\textbf{Werkzeugsatz} (G7104C\#001)\newline Werkzeugsatz für Agilent 1260/1290 Infinity II LC-Systeme.&1&\SI{214.5}{\sieuro}\\
3 &\textbf{InfinityLab StaySafe Starter-Kit} (G7104C\#034)\newline Enthält StaySafe-Verschlüsse für Lösemittelflaschen, Belüftungsventile mit Indikatorstreifen und Fittinge.&1&\SI{377.85}{\sieuro}\\
4 &\textbf{Poroshell 120 Säule} (G7104C\#097)\newline Poroshell 120 EC-C18, 3,0 x 150 mm, 2,7 µm.&1&\SI{0.55}{\sieuro}\\
5 &\textbf{CustomDescription missing} (693575-302\#)\newline CustomDescription missing&1&\SI{463.1}{\sieuro}\\
6 &\textbf{Vialsampler} (G7129C)\newline 1260 Infinity II Prime automatischer Flüssigprobengeber zur Verwendung bei bis zu 800 bar. Mit integriertem Nadelspülanschluss zur Minimierung der Verschleppung, 100 µl Dosiereinheit und 100 µl Probenschleife. Inklusive Gerätetreiber für ein LC-System (2D-UV).&1&\SI{10981.3}{\sieuro}\\
7 &\textbf{Probenteller für 6x11 2,0 ml Vials} (G7129C\#010)\newline &1&\SI{204.05}{\sieuro}\\
8 &\textbf{Vorhandene Agilent CDS-Lizenz} (G7129C\#060)\newline Es ist vorgesehen, dass dieses Agilent LC- System von dem Agilent OpenLAB Chromatography Datensystem 2.x gesteuert wird. Es wird eine vorhandene Lizenz genutzt.&1&\SI{-986.15}{\sieuro}\\
9 &\textbf{Säulenthermostat} (G7116A)\newline 1260 Infinity II Thermostat für bis zu vier 30 cm Säulen, Temperaturbereich: 10° unter Raumtemperatur (min. 4 °C) bis max. 85 °C, inkl. Säulenidentifikations-Kit. Ventilantrieb optional.&1&\SI{3571.7}{\sieuro}\\
10 &\textbf{Diodenarraydetektor HS} (G7117C)\newline 1260 Infinity II Diodenarray-Detektor high sensitivity für höchste Empfindlichkeit, 120 Hz Datenrate für schnelle Multiwellenlängen- und Spektralanalysen. Messbereich 190 640 nm, RFID-Tags für Zelle und Lampe. Inklusive Standard-Max-Light-Flusszelle (10 mm, V = 1 µl, max. 70 bar).&1&\SI{13698.3}{\sieuro}\\
11 &\textbf{OpenLab CDS 2 Workstation Plus PC Bundle} (M8411AA)\newline OpenLab CDS Workstation Plus; Software, Lizenzen, Workstation-PC.\newline Inklusive integriertem Content Management, 2 Geräteverbindungslizenzen, einjährigem Software-Wartungsvertrag sowie telefonischem Support.&1&\SI{13433.2}{\sieuro}\\
12 &\textbf{Inkludierte Gerätelizenz} (M8411AA\#001)\newline Für ein Agilent LC-System ohne 3D UV/DAD.&1&\SI{0}{\sieuro}\\
13 &\textbf{Inkludierte Gerätelizenz} (M8411AA\#005)\newline Für ein Agilent 3D UV/DAD-Modul.&1&\SI{0}{\sieuro}\\
14 &\textbf{1260 Infinity II HPLC-System} (SYS-LC-1260II)\newline &1&\SI{0}{\sieuro}\\
15 &\textbf{Erweiterte Gewährleistung Plus (3 Jahre)} (SYS-LC-1260II\#1A3)\newline Erweiterte Gewährleistung Plus - 3 Jahre insgesamt. Enthält zusätzlich zur Gewährleistung ein vorbeugende Wartung nach einem Jahr.&1&\SI{160.32}{\sieuro}\\
16 &\textbf{Einführung} (SYS-LC-1260II\#2A9)\newline Standardeinweisung für neue Anwender im Rahmen der Installation.&1&\SI{827.2}{\sieuro}\\
17 &\textbf{Installation and Operational Qualification} (SYS-LC-1260II\#6H9)\newline Gerätequalifizierung (IQ/OQ) im Rahmen der Installation.&1&\SI{47.46}{\sieuro}\\
18 &\textbf{OpenLAB CDS WorkStation} (SYS-SW-OLAB-E)\newline &1&\SI{0}{\sieuro}\\
19 &\textbf{Installation and Operational Qualification} (SYS-SW-OLAB-E\#6H9)\newline Gerätequalifizierung (IQ/OQ) im Rahmen der Installation.&1&\SI{29.76}{\sieuro}\\
\hline
\end{longtable}
\end{center}
\vspace{-2cm}
\begin{flushright}
\begin{tabular}{|rr|}
\hline
\textbf{Summe netto} & \SI{62004.19}{\sieuro}\\
\textbf{Versand und Bereitstellungskosten (3\%)} & \SI{1860.1257}{\sieuro}\\
\textbf{Gesamtsumme netto} & \SI{63864.3157}{\sieuro}\\
\hline
\end{tabular}
\end{flushright}
Der Betrag versteht sich zzgl. der gesetzlichen Steuern.\\
Diese werden im Rechnungszeitraum auf der Rechnung gesondert ausgewiesen.\\
Zahlungsbedingungen: 30 Tage netto ab Rechnungsdatum.\\
Incoterm (2010) für Lieferungen innerhalb Deutschlands: DDP.
\begin{small}
\textbf{Gewährleistung:}\\
Die Gewährleistung für Zubehör und Ersatzteilprodukte und für Analytik-Hardwareprodukte beträgt 12 Monate.
\textbf{Hinweis:}\\
Fü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.
\end{small}
\begin{scriptsize}
Agilent Technologies Deutschland GmbH, Hewlett-Packard-Str. 8, D-76337 Waldbronn\\
Telefon +49 (0)7243-602-0\\
USt.-IdNr.: DE812729296, WEEE-Reg.-Nr. DE 86631749\\
Sitz der Gesellschaft: Waldbronn Amtsgericht Mannheim, HRB 723782\\
Geschäftsführer: Dr. Andreas Kistner (Vorsitzender der Geschäftsführung), Armin Jehle, Norbert Sabatzki, Dr. Knut Wintergerst\\
\href{www.agilent.com}{www.agilent.com}
\end{scriptsize}
\end{document}

@ -0,0 +1,20 @@
# Part Number Opt PL Description Qty Price EUR Breaks EUR Uplift % Total Discount % Net EUR Total EUR Sales Discount YA9% Contractual Discount Y99% Promotion Discount Y07% Demo Discount Y04% PH Code PH Description YMax
1 G7104C 29 1260 Infinity II Flexible Pumpe 1 34511 0 0 45 18981.05 18981.05 45 0 0 0 ISL100P1 Pumps
2 G7104C 001 29 HPLC System Tool-Kit 1260 Infinity II 1 390 0 0 45 214.5 214.5 45 0 0 0
3 G7104C 034 29 InfinityLab Stay Safe Verschl., St.-Kit 1 687 0 0 45 377.85 377.85 45 0 0 0
4 G7104C 097 29 Poroshell 120 EC-C18 3,0x150mm, 2,7um 1 1 0 0 45 0.55 0.55 45 0 0 0
5 693575-302 BC P120 EC-C18,3,0x150mm,2,7um, 1000 bar, T 1 842 0 0 45 463.1 463.1 45 0 0 0 CSCSPMCV01 Poroshell 120-2.7
6 G7129C 29 1260 Inf. II Fluessigprobengeber 1 19966 0 0 45 10981.3 10981.3 45 0 0 0 ISL100A1 Autosamplers
7 G7129C 010 29 Standard-Schublade (6x11 Probenflaschen) 1 371 0 0 45 204.05 204.05 45 0 0 0
8 G7129C 060 29 Nutzung vorhandene Lizenz 1 -1793 0 0 45 -986.15 -986.15 45 0 0 0
9 G7116A 29 1260 Infinity II Therm. f. mehr. Saeulen 1 6494 0 0 45 3571.7 3571.7 45 0 0 0 ISL100LC1 LC Hardware
10 G7117C 29 1260 Infinity II Diodenarray-Detektor HS 1 24906 0 0 45 13698.3 13698.3 45 0 0 0 ISL100D1 Detectors
11 M8411AA LI OpenLab CDS Workstation Plus PC-Paket 1 24424 0 0 45 13433.2 13433.2 45 0 0 0 ISF300F110 OpenLAB CDS w/Hardware
12 M8411AA 001 LI LC-Geraeteverbindung 1 0 0 0 45 0 0 45 0 0 0
13 M8411AA 005 LI 3D UV/DAD-Verb. 1 0 0 0 45 0 0 45 0 0 0
14 SYS-LC-1260II 74 LC 1260 Infinity II System 1 0 0 0 20 0 0 20 0 0 0 TSSYS0SYLC Service Systems - Liquid Chromatography
15 SYS-LC-1260II 1A3 74 Erweit. Gewaehrl. Plus 3 Jahre insg. 1 16032 0 0 99 160.32 160.32 92 0 7 0 TSSYS3 Serviced As Systems - 3 YR > 29
16 SYS-LC-1260II 2A9 74 Standard-Einweisung 1 1034 0 0 20 827.2 827.2 20 0 0 0 TSSTRN Training Services
17 SYS-LC-1260II 6H9 74 Analysegeraet-Qualifizierung-auf Wunsch 1 4746 0 0 99 47.46 47.46 99 0 0 0 TSSYS1 Serviced As Systems - 1 YR > 29
18 SYS-SW-OLAB-E 74 OpenLAB CDS WorkStation 1 0 0 0 99 0 0 99 0 0 0 TSSYS0SYSW Service Systems - Software > 29
19 SYS-SW-OLAB-E 6H9 74 Analysegeraet-Qualifizierung-auf Wunsch 1 2976 0 0 99 29.76 29.76 99 0 0 0 TSSYS1 Serviced As Systems - 1 YR > 29
1 # Part Number Opt PL Description Qty Price EUR Breaks EUR Uplift % Total Discount % Net EUR Total EUR Sales Discount YA9% Contractual Discount Y99% Promotion Discount Y07% Demo Discount Y04% PH Code PH Description YMax
2 1 G7104C 29 1260 Infinity II Flexible Pumpe 1 34511 0 0 45 18981.05 18981.05 45 0 0 0 ISL100P1 Pumps
3 2 G7104C 001 29 HPLC System Tool-Kit 1260 Infinity II 1 390 0 0 45 214.5 214.5 45 0 0 0
4 3 G7104C 034 29 InfinityLab Stay Safe Verschl., St.-Kit 1 687 0 0 45 377.85 377.85 45 0 0 0
5 4 G7104C 097 29 Poroshell 120 EC-C18 3,0x150mm, 2,7um 1 1 0 0 45 0.55 0.55 45 0 0 0
6 5 693575-302 BC P120 EC-C18,3,0x150mm,2,7um, 1000 bar, T 1 842 0 0 45 463.1 463.1 45 0 0 0 CSCSPMCV01 Poroshell 120-2.7
7 6 G7129C 29 1260 Inf. II Fluessigprobengeber 1 19966 0 0 45 10981.3 10981.3 45 0 0 0 ISL100A1 Autosamplers
8 7 G7129C 010 29 Standard-Schublade (6x11 Probenflaschen) 1 371 0 0 45 204.05 204.05 45 0 0 0
9 8 G7129C 060 29 Nutzung vorhandene Lizenz 1 -1793 0 0 45 -986.15 -986.15 45 0 0 0
10 9 G7116A 29 1260 Infinity II Therm. f. mehr. Saeulen 1 6494 0 0 45 3571.7 3571.7 45 0 0 0 ISL100LC1 LC Hardware
11 10 G7117C 29 1260 Infinity II Diodenarray-Detektor HS 1 24906 0 0 45 13698.3 13698.3 45 0 0 0 ISL100D1 Detectors
12 11 M8411AA LI OpenLab CDS Workstation Plus PC-Paket 1 24424 0 0 45 13433.2 13433.2 45 0 0 0 ISF300F110 OpenLAB CDS w/Hardware
13 12 M8411AA 001 LI LC-Geraeteverbindung 1 0 0 0 45 0 0 45 0 0 0
14 13 M8411AA 005 LI 3D UV/DAD-Verb. 1 0 0 0 45 0 0 45 0 0 0
15 14 SYS-LC-1260II 74 LC 1260 Infinity II System 1 0 0 0 20 0 0 20 0 0 0 TSSYS0SYLC Service Systems - Liquid Chromatography
16 15 SYS-LC-1260II 1A3 74 Erweit. Gewaehrl. Plus – 3 Jahre insg. 1 16032 0 0 99 160.32 160.32 92 0 7 0 TSSYS3 Serviced As Systems - 3 YR > 29
17 16 SYS-LC-1260II 2A9 74 Standard-Einweisung 1 1034 0 0 20 827.2 827.2 20 0 0 0 TSSTRN Training Services
18 17 SYS-LC-1260II 6H9 74 Analysegeraet-Qualifizierung-auf Wunsch 1 4746 0 0 99 47.46 47.46 99 0 0 0 TSSYS1 Serviced As Systems - 1 YR > 29
19 18 SYS-SW-OLAB-E 74 OpenLAB CDS WorkStation 1 0 0 0 99 0 0 99 0 0 0 TSSYS0SYSW Service Systems - Software > 29
20 19 SYS-SW-OLAB-E 6H9 74 Analysegeraet-Qualifizierung-auf Wunsch 1 2976 0 0 99 29.76 29.76 99 0 0 0 TSSYS1 Serviced As Systems - 1 YR > 29

@ -0,0 +1,135 @@
\documentclass[a4paper,ngerman,parskip,10pt]{scrlttr2}
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage[hidelinks]{hyperref}
\usepackage[left=2cm, right=2cm, top=2cm, bottom=2cm]{geometry}
\usepackage[table]{xcolor}
\usepackage[right]{{eurosym}}
\usepackage[locale=DE]{{siunitx}}
\usepackage{{scrlayer-scrpage}}
\usepackage{{lastpage}}
\usepackage{{graphicx}}
\usepackage{{multirow}}
\usepackage{{longtable}}
\usepackage{{enumitem}}
\usepackage{{fp, xstring, spreadtab, numprint}}
\DeclareSIUnit{{\sieuro}}{{\mbox{{\euro}}}}
\rohead{DE-83PE89-623-244}
\cfoot{Seite \thepage/\pageref{LastPage}}
\sisetup{round-integer-to-decimal,round-precision=2,round-mode=places}
\newcommand{\produkttitel}[1]{\textsc{#1}}
\renewcommand{\arraystretch}{1.2}
\definecolor{AgilentBlau}{HTML}{0085d5}
\setlist{noitemsep}
\begin{document}
\begin{tabular}{p{0.4\hsize}p{0.5\hsize}}
\multirow{4}{*}{\includegraphics[width=0.9\hsize]{agilentLogo.png}}
&\normalsize{Agilent Technologies Deutschland GmbH}\\
&\normalsize{Life Sciences \& Chemical Analysis}\\
&\normalsize{Hewlett-Packard-Str. 8}\\
&\normalsize{D-76337 Waldbronn}
\end{tabular}
\par
\begin{flushright}
\colorbox{AgilentBlau}{\textcolor{white}{\textsc{\Huge{Angebot}}}}
\end{flushright}
\begin{tabular}{p{0.4\hsize}p{0.6\hsize}}
&
\multirow{4}{*}{
\begin{tabular}{|ll|}
\hline
\textbf{Angebotsnummer:}&DE-83PE89-623-244\\
Angebotdatum:&\today\\
Angebotsgültigkeit:&60 Tage\\\textbf{Ansprechpartner:}&Sascha Woitschetzki\\
Telefon: &+49 208 74129134\\
Mobil:&+49 163 9681131\\
E-Mail:&\href{mailto:sascha.woitschetzki@non.agilent.com}{sascha.woitschetzki@non.agilent.com}\\
\textbf{Auftragsannahme:}&\href{mailto:salesservices\_germany@agilent.com}{salesservices\_germany@agilent.com}\\
\hline
\end{tabular}
}\\
Herr Rolf Weber
\\
DALLI-WERKE GmbH \& Co KG
\\
Zweifaller Str. 120
\\
52224 Stolberg
\\
&\\
&\\
\end{tabular}
\vspace{1cm}\par
Sehr geehrter Herr Weber,\par
nachfolgend erhalten Sie Ihr gewünschtes Angebot über ein(e) 7010C.\\
Es umfasst im Einzelnen:
\begin{itemize}
\item Kollisionszelle fuer MS/MS (\#1)
\item Installationsvorbereitung (\#2)
\item 7010C Quadrupol-MS/MS EI-Paket (\#3)
\begin{itemize}
\item Trockenlaufende (Scroll-)Ersatzpumpe (\#4)
\item MS fuer 8890 GC (\#5)
\end{itemize}
\item Zusätzliche Installationszeit (\#6)
\end{itemize}
Für Rückfragen und Änderungswünsche stehe ich Ihnen gerne zur Verfügung.\par
Mit freundlichen Grüßen\\
\includegraphics[width = 5cm]{signWoitschetzki.png}
\vspace{1cm} \\
\begin{center}
\begin{longtable}
{| cp{0.595\textwidth} crr |} \hline
\textbf{\#} & \textbf{Produktbeschreibung} (Produktnummer) & \textbf{Menge} & \textbf{Discount} & \textbf{Preis}\\ \hline \endhead
1 &\textbf{Kollisionszelle fuer MS/MS} (G3479A)\newline \newline Listenpreis: \SI{4371}{\sieuro}&1&\SI{45}{\%}&\SI{2404.05}{\sieuro}\\
2 &\textbf{Installationsvorbereitung} (G3391A)\newline Paket zur Installationsvorbereitung für MSDs.\newline Listenpreis: \SI{54}{\sieuro}&1&\SI{45}{\%}&\SI{29.7}{\sieuro}\\
3 &\textbf{7010C Quadrupol-MS/MS EI-Paket} (G7012CA)\newline \newline Listenpreis: \SI{284548}{\sieuro}&1&\SI{45}{\%}&\SI{156501.4}{\sieuro}\\
4 &\textbf{Trockenlaufende (Scroll-)Ersatzpumpe} (G7012CA\#999)\newline \newline Listenpreis: \SI{4001}{\sieuro}&1&\SI{99.99999}{\%}&\SI{0}{\sieuro}\\
5 &\textbf{MS fuer 8890 GC} (G7012CA\#245)\newline \newline Listenpreis: \SI{-2484}{\sieuro}&1&\SI{45}{\%}&\SI{-1366.2}{\sieuro}\\
6 &\textbf{Zusätzliche Installationszeit} (H5949A)\newline Für .\newline Nur in Verbindung mit einer Geräteinstallation, stundenbasierter Preis.\newline Listenpreis: \SI{288}{\sieuro}&8&\SI{20}{\%}&\SI{1843.2}{\sieuro}\\
\hline
\end{longtable}
\end{center}
\vspace{-2cm}
\begin{flushright}
\begin{tabular}{|rr|}
\hline
\textbf{Summe netto} & \SI{159412.15}{\sieuro}\\
\textbf{Versand und Bereitstellungskosten (3\%)} & \SI{3000}{\sieuro}\\
\textbf{Gesamtsumme netto} & \SI{162412.15}{\sieuro}\\
\hline
\end{tabular}
\end{flushright}
Der Betrag versteht sich zzgl. der gesetzlichen Steuern.\\
Diese werden im Rechnungszeitraum auf der Rechnung gesondert ausgewiesen.\\
Zahlungsbedingungen: 30 Tage netto ab Rechnungsdatum.\\
Incoterm (2010) für Lieferungen innerhalb Deutschlands: DDP.
\begin{small}
\textbf{Gewährleistung:}\\
Die Gewährleistung für Zubehör und Ersatzteilprodukte und für Analytik-Hardwareprodukte beträgt 12 Monate.
\textbf{Hinweis:}\\
Fü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.
\end{small}
\begin{scriptsize}
Agilent Technologies Deutschland GmbH, Hewlett-Packard-Str. 8, D-76337 Waldbronn\\
Telefon +49 (0)7243-602-0\\
USt.-IdNr.: DE812729296, WEEE-Reg.-Nr. DE 86631749\\
Sitz der Gesellschaft: Waldbronn Amtsgericht Mannheim, HRB 723782\\
Geschäftsführer: Dr. Andreas Kistner (Vorsitzender der Geschäftsführung), Armin Jehle, Norbert Sabatzki, Dr. Knut Wintergerst\\
\href{www.agilent.com}{www.agilent.com}
\end{scriptsize}
\end{document}

@ -0,0 +1,7 @@
# Part Number Opt PL Description Qty Price EUR Breaks EUR Uplift % Total Discount % Net EUR Total EUR Sales Discount YA9% Contractual Discount Y99% Promotion Discount Y07% Demo Discount Y04% PH Code PH Description YMax
1 G3479A AZ Kollisionszelle fuer MS/MS 1 4371 0 0 45 2404.05 2404.05 45 0 0 0 ISG100G190 GC Accessories
2 G3391A BZ Package zur Installationsvorbereitung 1 54 0 0 45 29.7 29.7 45 0 0 0 ISG300G390 MSD Accessories
3 G7012CA BZ 7010C Quadrupol-MS/MS EI-Paket 1 284548 0 0 45 156501.4 156501.4 45 0 0 0 ISG330G311 GCMS QQQ Bundle
4 G7012CA 999 BZ Trockenlaufende (Scroll-)Ersatzpumpe 1 4001 0 0 99.99999 0 0 99.99999 0 0 0
5 G7012CA 245 BZ MS fuer 8890 GC 1 -2484 0 0 45 -1366.2 -1366.2 45 0 0 0
6 H5949A 74 Ergaenzende Inst., Arbeitsaufwand 1 Std. 8 288 0 0 20 230.4 1843.2 20 0 0 0 XG PrCatgry XG
1 # Part Number Opt PL Description Qty Price EUR Breaks EUR Uplift % Total Discount % Net EUR Total EUR Sales Discount YA9% Contractual Discount Y99% Promotion Discount Y07% Demo Discount Y04% PH Code PH Description YMax
2 1 G3479A AZ Kollisionszelle fuer MS/MS 1 4371 0 0 45 2404.05 2404.05 45 0 0 0 ISG100G190 GC Accessories
3 2 G3391A BZ Package zur Installationsvorbereitung 1 54 0 0 45 29.7 29.7 45 0 0 0 ISG300G390 MSD Accessories
4 3 G7012CA BZ 7010C Quadrupol-MS/MS EI-Paket 1 284548 0 0 45 156501.4 156501.4 45 0 0 0 ISG330G311 GCMS QQQ Bundle
5 4 G7012CA 999 BZ Trockenlaufende (Scroll-)Ersatzpumpe 1 4001 0 0 99.99999 0 0 99.99999 0 0 0
6 5 G7012CA 245 BZ MS fuer 8890 GC 1 -2484 0 0 45 -1366.2 -1366.2 45 0 0 0
7 6 H5949A 74 Ergaenzende Inst., Arbeitsaufwand 1 Std. 8 288 0 0 20 230.4 1843.2 20 0 0 0 XG PrCatgry XG

@ -0,0 +1,135 @@
\documentclass[a4paper,ngerman,parskip,10pt]{scrlttr2}
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage[hidelinks]{hyperref}
\usepackage[left=2cm, right=2cm, top=2cm, bottom=2cm]{geometry}
\usepackage[table]{xcolor}
\usepackage[right]{{eurosym}}
\usepackage[locale=DE]{{siunitx}}
\usepackage{{scrlayer-scrpage}}
\usepackage{{lastpage}}
\usepackage{{graphicx}}
\usepackage{{multirow}}
\usepackage{{longtable}}
\usepackage{{enumitem}}
\usepackage{{fp, xstring, spreadtab, numprint}}
\DeclareSIUnit{{\sieuro}}{{\mbox{{\euro}}}}
\rohead{DE-83PE89-623-245}
\cfoot{Seite \thepage/\pageref{LastPage}}
\sisetup{round-integer-to-decimal,round-precision=2,round-mode=places}
\newcommand{\produkttitel}[1]{\textsc{#1}}
\renewcommand{\arraystretch}{1.2}
\definecolor{AgilentBlau}{HTML}{0085d5}
\setlist{noitemsep}
\begin{document}
\begin{tabular}{p{0.4\hsize}p{0.5\hsize}}
\multirow{4}{*}{\includegraphics[width=0.9\hsize]{agilentLogo.png}}
&\normalsize{Agilent Technologies Deutschland GmbH}\\
&\normalsize{Life Sciences \& Chemical Analysis}\\
&\normalsize{Hewlett-Packard-Str. 8}\\
&\normalsize{D-76337 Waldbronn}
\end{tabular}
\par
\begin{flushright}
\colorbox{AgilentBlau}{\textcolor{white}{\textsc{\Huge{Angebot}}}}
\end{flushright}
\begin{tabular}{p{0.4\hsize}p{0.6\hsize}}
&
\multirow{4}{*}{
\begin{tabular}{|ll|}
\hline
\textbf{Angebotsnummer:}&DE-83PE89-623-245\\
Angebotdatum:&\today\\
Angebotsgültigkeit:&60 Tage\\\textbf{Ansprechpartner:}&Sascha Woitschetzki\\
Telefon: &+49 208 74129134\\
Mobil:&+49 163 9681131\\
E-Mail:&\href{mailto:sascha.woitschetzki@non.agilent.com}{sascha.woitschetzki@non.agilent.com}\\
\textbf{Auftragsannahme:}&\href{mailto:salesservices\_germany@agilent.com}{salesservices\_germany@agilent.com}\\
\hline
\end{tabular}
}\\
Herr Rolf Weber
\\
DALLI-WERKE GmbH \& Co KG
\\
Zweifaller Str. 120
\\
52224 Stolberg
\\
&\\
&\\
\end{tabular}
\vspace{1cm}\par
Sehr geehrter Herr Weber,\par
nachfolgend erhalten Sie Ihr gewünschtes Angebot über ein(e) 7010C.\\
Es umfasst im Einzelnen:
\begin{itemize}
\item Kollisionszelle (\#1)
\item Installationsvorbereitung (\#2)
\item 7010C GC QQQ (\#3)
\begin{itemize}
\item Ölfreie Vorpumpe IDP-10 (\#4)
\item Konfig für 8890 (\#5)
\end{itemize}
\item Zusätzliche Installationszeit (\#6)
\end{itemize}
Für Rückfragen und Änderungswünsche stehe ich Ihnen gerne zur Verfügung.\par
Mit freundlichen Grüßen\\
\includegraphics[width = 5cm]{signWoitschetzki.png}
\vspace{1cm} \\
\begin{center}
\begin{longtable}
{| cp{0.595\textwidth} crr |} \hline
\textbf{\#} & \textbf{Produktbeschreibung} (Produktnummer) & \textbf{Menge} & \textbf{Discount} & \textbf{Preis}\\ \hline \endhead
1 &\textbf{Kollisionszelle} (G3479A)\newline Kollisionszelle für QQQ- und QToF-Massenspektrometer.\newline Listenpreis: \SI{4371}{\sieuro}&1&\SI{45}{\%}&\SI{2404,05}{\sieuro}\\
2 &\textbf{Installationsvorbereitung} (G3391A)\newline Paket zur Installationsvorbereitung für MSDs.\newline Listenpreis: \SI{54}{\sieuro}&1&\SI{45}{\%}&\SI{29,7}{\sieuro}\\
3 &\textbf{7010C GC QQQ} (G7012CA)\newline 7010C Quadrupol MS/MS-EI-Paket.\newline Inkl. High Efficiency-EI-Quelle, MassHunter-Software, PC, 1 Jahr telefonischer Software-Support, Installation, Einweisung und 3-tägigem Anwendertraining in Waldbronn.\newline Listenpreis: \SI{284548}{\sieuro}&1&\SI{45}{\%}&\SI{156501,4}{\sieuro}\\
4 &\textbf{Ölfreie Vorpumpe IDP-10} (G7012CA\#999)\newline IDP-10\newline Listenpreis: \SI{4001}{\sieuro}&1&\SI{99,99999}{\%}&\SI{0}{\sieuro}\\
5 &\textbf{Konfig für 8890} (G7012CA\#245)\newline \newline Listenpreis: \SI{-2484}{\sieuro}&1&\SI{45}{\%}&\SI{-1366,2}{\sieuro}\\
6 &\textbf{Zusätzliche Installationszeit} (H5949A)\newline Für .\newline Nur in Verbindung mit einer Geräteinstallation, stundenbasierter Preis.\newline Listenpreis: \SI{288}{\sieuro}&8&\SI{20}{\%}&\SI{1843,2}{\sieuro}\\
\hline
\end{longtable}
\end{center}
\vspace{-2cm}
\begin{flushright}
\begin{tabular}{|rr|}
\hline
\textbf{Summe netto} & \SI{159412,15}{\sieuro}\\
\textbf{Versand und Bereitstellungskosten (3\%)} & \SI{2650}{\sieuro}\\
\textbf{Gesamtsumme netto} & \SI{162062,15}{\sieuro}\\
\hline
\end{tabular}
\end{flushright}
Der Betrag versteht sich zzgl. der gesetzlichen Steuern.\\
Diese werden im Rechnungszeitraum auf der Rechnung gesondert ausgewiesen.\\
Zahlungsbedingungen: 30 Tage netto ab Rechnungsdatum.\\
Incoterm (2010) für Lieferungen innerhalb Deutschlands: DDP.
\begin{small}
\textbf{Gewährleistung:}\\
Die Gewährleistung für Zubehör und Ersatzteilprodukte und für Analytik-Hardwareprodukte beträgt 12 Monate.
\textbf{Hinweis:}\\
Fü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.
\end{small}
\begin{scriptsize}
Agilent Technologies Deutschland GmbH, Hewlett-Packard-Str. 8, D-76337 Waldbronn\\
Telefon +49 (0)7243-602-0\\
USt.-IdNr.: DE812729296, WEEE-Reg.-Nr. DE 86631749\\
Sitz der Gesellschaft: Waldbronn Amtsgericht Mannheim, HRB 723782\\
Geschäftsführer: Dr. Andreas Kistner (Vorsitzender der Geschäftsführung), Armin Jehle, Norbert Sabatzki, Dr. Knut Wintergerst\\
\href{www.agilent.com}{www.agilent.com}
\end{scriptsize}
\end{document}

@ -0,0 +1,7 @@
# Part Number Opt PL Description Qty Price EUR Breaks EUR Uplift % Total Discount % Net EUR Total EUR Sales Discount YA9% Contractual Discount Y99% Promotion Discount Y07% Demo Discount Y04% PH Code PH Description YMax
1 G3479A AZ Kollisionszelle fuer MS/MS 1 4371 0 0 45 2404.05 2404.05 45 0 0 0 ISG100G190 GC Accessories
2 G3391A BZ Package zur Installationsvorbereitung 1 54 0 0 45 29.7 29.7 45 0 0 0 ISG300G390 MSD Accessories
3 G7012CA BZ 7010C Quadrupol-MS/MS EI-Paket 1 284548 0 0 45 156501.4 156501.4 45 0 0 0 ISG330G311 GCMS QQQ Bundle
4 G7012CA 999 BZ Trockenlaufende (Scroll-)Ersatzpumpe 1 4001 0 0 99.99999 0 0 99.99999 0 0 0
5 G7012CA 245 BZ MS fuer 8890 GC 1 -2484 0 0 45 -1366.2 -1366.2 45 0 0 0
6 H5949A 74 Ergaenzende Inst., Arbeitsaufwand 1 Std. 8 288 0 0 20 230.4 1843.2 20 0 0 0 XG PrCatgry XG
1 # Part Number Opt PL Description Qty Price EUR Breaks EUR Uplift % Total Discount % Net EUR Total EUR Sales Discount YA9% Contractual Discount Y99% Promotion Discount Y07% Demo Discount Y04% PH Code PH Description YMax
2 1 G3479A AZ Kollisionszelle fuer MS/MS 1 4371 0 0 45 2404.05 2404.05 45 0 0 0 ISG100G190 GC Accessories
3 2 G3391A BZ Package zur Installationsvorbereitung 1 54 0 0 45 29.7 29.7 45 0 0 0 ISG300G390 MSD Accessories
4 3 G7012CA BZ 7010C Quadrupol-MS/MS EI-Paket 1 284548 0 0 45 156501.4 156501.4 45 0 0 0 ISG330G311 GCMS QQQ Bundle
5 4 G7012CA 999 BZ Trockenlaufende (Scroll-)Ersatzpumpe 1 4001 0 0 99.99999 0 0 99.99999 0 0 0
6 5 G7012CA 245 BZ MS fuer 8890 GC 1 -2484 0 0 45 -1366.2 -1366.2 45 0 0 0
7 6 H5949A 74 Ergaenzende Inst., Arbeitsaufwand 1 Std. 8 288 0 0 20 230.4 1843.2 20 0 0 0 XG PrCatgry XG