SpinningWheel while creating Tex and Pdf

pull/1/head
DJh2o2 2023-02-23 13:08:11 +07:00
parent 653e02a6fb
commit ec0fd17ee8
21 changed files with 793 additions and 288 deletions

@ -0,0 +1,12 @@
{
"version": 1,
"isRoot": true,
"tools": {
"dotnet-ef": {
"version": "7.0.3",
"commands": [
"dotnet-ef"
]
}
}
}

@ -19,11 +19,6 @@
<NoWarn />
</PropertyGroup>
<ItemGroup>
<Content Include="img\agilentLogo.png" />
<Content Include="img\signWoitschetzki.png" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Blazorise.Bootstrap" Version="1.2.0-preview2" />
<PackageReference Include="Blazorise.Components" Version="1.2.0-preview2" />
@ -61,4 +56,12 @@
<Folder Include="wwwroot\quotes\" />
</ItemGroup>
<ItemGroup>
<None Include="wwwroot\img\agilentLogo.png" />
<None Include="wwwroot\img\gremlin.jpg" />
<None Include="wwwroot\img\gremlin.png" />
<None Include="wwwroot\img\gremlin.xcf" />
<None Include="wwwroot\img\signWoitschetzki.png" />
</ItemGroup>
</Project>

@ -167,10 +167,10 @@
}
<h2>Create Quote</h2>
<Button Color="Color.Primary" Disabled="@lineItemsNotReady" Clicked="@OnCreateTex">Create Tex from Quote</Button>
<Button Color="Color.Secondary" Disabled="@texNotReady" Clicked="@OnCreatePdf">Create PDF from Tex</Button>
<Button Color="Color.Secondary" Disabled="@pdfNotReady" Clicked="@OnOpenPdfApp">Open PDF with App</Button>
<Button Color="Color.Secondary" Disabled="@pdfNotReady" Clicked="@OnOpenPdfNewTab">Open PDF in Tab</Button>
<Button Color="Color.Primary" Disabled="@lineItemsNotReady" Clicked="@OnCreateTex" Loading="@isCreatingTex">Create Tex from Quote</Button>
<Button Color="Color.Secondary" Disabled="@texNotReady" Clicked="@OnCreatePdf" Loading="@isCreatingPdf">Create Pdf from Tex</Button>
<Button Color="Color.Secondary" Disabled="@pdfNotReady" Clicked="@OnOpenPdfApp">Open Pdf with App</Button>
<Button Color="Color.Secondary" Disabled="@pdfNotReady" Clicked="@OnOpenPdfNewTab">Open Pdf in Tab</Button>
<Button Color="Color.Success" Disabled="@pdfNotReady" Clicked="@OnSave">Save</Button>
<Button Color="Color.Danger" Clicked="@OnCancel">Cancel</Button>
@ -192,7 +192,9 @@
private CustomDescription? customDescriptionOfSelectedLineItem;
private readonly CultureInfo cultureInfo = new("de-DE");
private bool pdfNotReady = true;
private bool isCreatingPdf;
private bool texNotReady = true;
private bool isCreatingTex;
private bool lineItemsNotReady = true;
private string? url;
private bool debug;
@ -267,25 +269,29 @@
return Task.CompletedTask;
}
private Task OnCreateTex() {
quote.Tex = QuoteHandling.CreateTex(quote)?.ToString();
if (quote.Tex == null) return Task.CompletedTask;
FileService.WriteTexFile(quote);
private async Task OnCreateTex() {
isCreatingTex = true;
quote.Tex = (await QuoteHandling.CreateTex(quote))?.ToString();
if (quote.Tex == null) return;
await FileService.WriteTexFile(quote);
isCreatingTex = false;
Console.WriteLine("Tex file succesfull created.");
texNotReady = false;
return Task.CompletedTask;
return;
}
private Task OnCreatePdf()
private async Task OnCreatePdf()
{
if(PdfService.CreatePdf(quote))
isCreatingPdf = true;
if(await PdfService.CreatePdf(quote))
{
pdfNotReady = false;
isCreatingPdf = false;
Console.WriteLine("PDF successfull written.");
url = HostingService.GetPdfUrl(quote);
Console.WriteLine($"URL to PDF is {url}");
}
return Task.CompletedTask;
return;
}
private Task OnOpenPdfApp()

@ -1,70 +1,83 @@
using System.Diagnostics;
using Gremlin_BlazorServer.Data.EntityClasses;
using System.Reflection;
using System.Text;
using Gremlin_BlazorServer.Data.EntityClasses;
namespace Gremlin_BlazorServer.Services;
internal static class FileService
{
private static readonly Encoding defaultEncodingIfNoBom = Encoding.UTF8;
private static readonly Encoding defaultEncodingIfNoBom = Encoding.UTF8;
public static string ReadResource(string name)
{
Assembly assembly = Assembly.GetExecutingAssembly();
// Format: "{Namespace}.{Folder}.{filename}.{Extension}"
string resourcePath = name.StartsWith(nameof(Gremlin_BlazorServer))
? name
: assembly.GetManifestResourceNames().Single(str => str.EndsWith(name));
using Stream? stream = assembly.GetManifestResourceStream(resourcePath);
if (stream == null)
return "";
using StreamReader reader = new(stream);
return reader.ReadToEnd();
}
public static string ReadResource(string name)
{
Assembly assembly = Assembly.GetExecutingAssembly();
// Format: "{Namespace}.{Folder}.{filename}.{Extension}"
string resourcePath = name.StartsWith(nameof(Gremlin_BlazorServer))
? name
: assembly.GetManifestResourceNames().Single(str => str.EndsWith(name));
using Stream? stream = assembly.GetManifestResourceStream(resourcePath);
if (stream == null)
{
return "";
}
public static Encoding GetEncoding(string fileName)
{
Stream fileStream = File.OpenRead(fileName);
using StreamReader reader = new(fileStream, defaultEncodingIfNoBom, true);
_ = reader.Peek();
Encoding encoding = reader.CurrentEncoding;
return encoding;
}
using StreamReader reader = new(stream);
return reader.ReadToEnd();
}
public static void WriteQuoteToTsv(string quoteContent, Quote quote)
{
string datei = $"{quote.Path}{Path.DirectorySeparatorChar}{quote.QuotationNumber}.tsv";
FileInfo fileInfo = new(datei);
if (fileInfo.Directory == null)
return;
if (!fileInfo.Directory.Exists)
try
{
Directory.CreateDirectory(fileInfo.DirectoryName ?? "");
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
public static Encoding GetEncoding(string fileName)
{
Stream fileStream = File.OpenRead(fileName);
using StreamReader reader = new(fileStream, defaultEncodingIfNoBom, true);
_ = reader.Peek();
Encoding encoding = reader.CurrentEncoding;
return encoding;
}
using StreamWriter writer = new(datei, false, Encoding.UTF8);
{
writer.WriteLine(quoteContent);
}
}
public static void WriteQuoteToTsv(string quoteContent, Quote quote)
{
string datei = $"{quote.Path}{Path.DirectorySeparatorChar}{quote.QuotationNumber}.tsv";
FileInfo fileInfo = new(datei);
if (fileInfo.Directory == null)
{
return;
}
public static void WriteTexFile(Quote quote)
{
string datei = $"{quote.Path}{Path.DirectorySeparatorChar}{quote.QuotationNumber}.tex";
FileInfo fileInfo = new(datei);
if (fileInfo.Directory == null)
return;
if (!fileInfo.Directory.Exists)
_ = Directory.CreateDirectory(fileInfo.DirectoryName ?? "");
using StreamWriter writer = new(datei, false, Encoding.UTF8);
{
writer.WriteLine(quote.Tex);
}
}
if (!fileInfo.Directory.Exists)
{
try
{
_ = Directory.CreateDirectory(fileInfo.DirectoryName ?? "");
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
using StreamWriter writer = new(datei, false, Encoding.UTF8);
{
writer.WriteLine(quoteContent);
}
}
public static async Task WriteTexFile(Quote quote)
{
string datei = $"{quote.Path}{Path.DirectorySeparatorChar}{quote.QuotationNumber}.tex";
FileInfo fileInfo = new(datei);
if (fileInfo.Directory == null)
{
return;
}
if (!fileInfo.Directory.Exists)
{
_ = Directory.CreateDirectory(fileInfo.DirectoryName ?? "");
}
using StreamWriter writer = new(datei, false, Encoding.UTF8);
{
await writer.WriteLineAsync(quote.Tex);
}
}
}

@ -5,7 +5,7 @@ namespace Gremlin_BlazorServer.Services;
internal abstract class PdfService
{
public static bool CreatePdf(Quote quote)
public static async Task<bool> CreatePdf(Quote quote)
{
if (quote.Path == null)
{
@ -15,11 +15,11 @@ internal abstract class PdfService
//Copy images to quotePath
try
{
File.Copy(Path.Combine("img", "agilentLogo.png"), Path.Combine(quote.Path, "agilentLogo.png"));
File.Copy(Path.Combine("img", "signWoitschetzki.png"), Path.Combine(quote.Path, "signWoitschetzki.png"));
File.Copy(Path.Combine("img", "agilentLogo.png"), Path.Combine(quote.Path, "agilentLogo.png"), true);
File.Copy(Path.Combine("img", "signWoitschetzki.png"), Path.Combine(quote.Path, "signWoitschetzki.png"), true);
//Create PDF twice
if (RunningPdfLaTeX(quote, 2))
if (await RunningPdfLaTeX(quote, 2))
{
return RemoveTempFiles(quote.Path);
}
@ -56,7 +56,7 @@ internal abstract class PdfService
return true;
}
private static bool RunningPdfLaTeX(Quote quote, int runs)
private static async Task<bool> RunningPdfLaTeX(Quote quote, int runs)
{
for (int i = 0; i < runs; i++)
{
@ -68,7 +68,7 @@ internal abstract class PdfService
try
{
_ = process.Start();
_ = await Task.Run(() => process.Start());
}
catch (Exception ex)
{

@ -1,213 +1,236 @@
using System.Diagnostics;
using Gremlin_BlazorServer.Data.EntityClasses;
using System.Globalization;
using System.Text;
using Gremlin_BlazorServer.Data.EntityClasses;
namespace Gremlin_BlazorServer.Services;
public static class QuoteHandling
{
public static StringBuilder? CreateTex(Quote quote)
{
StringBuilder? texString = TexService.CreateTex(quote);
if (texString == null)
return null;
Console.WriteLine(
texString.Length > 0
? "Creating TexFile succesfully."
: "Error during TexFile creation!"
);
return texString;
}
//FromWindowsGremlin
public static Quote ReadLineItems(Quote quote, string clipboard)
{
try
{
quote = ResetTotals(quote);
quote.LineItems = ReadLineItemsFromClipboard(clipboard);
quote.QuoteContains3Pp = DoesContains(quote, "3PP");
quote.QuoteContainsRb = DoesContains(quote, "RB");
quote.TotalListprice = GetTotal(quote, "TotalListprice");
quote.TotalDiscount = GetTotal(quote, "AverageDiscount");
quote.TotalNet = GetTotal(quote, "TotalNet");
if (quote.Recipient?.Account != null)
quote.ValidFor = CheckForAcademic(quote.Recipient.Account);
foreach (LineItem lineItem in quote.LineItems)
{
if (lineItem.OptionNumber == null)
break;
if (lineItem.OptionNumber.StartsWith("8D"))
quote.Warranty = int.Parse(lineItem.OptionNumber.Last().ToString()) * 12;
quote.Warranty = lineItem.OptionNumber switch
{
"9EC" => 24,
"9CC" => 36,
_ => quote.Warranty
};
}
quote = CalculateTotals(quote);
return quote;
}
catch (Exception e)
{
Console.WriteLine(e);
return new();
}
}
private static List<LineItem> ReadLineItemsFromClipboard(string clipboard)
{
//Zeilen aufteilen
IEnumerable<string> clipboardLines = clipboard.Split(Environment.NewLine.ToCharArray());
List<string[]> clipboardList = (
from clipboardLine in clipboardLines
where clipboardLine != ""
select clipboardLine.Split('\t')
).ToList();
return ParseClipboardList(clipboardList);
}
private static List<LineItem> ParseClipboardList(List<string[]> lineItemStrings)
{
List<LineItem> lineItems = new();
CultureInfo cultureInfoUs = new("en-US");
foreach (string[] lineItemString in lineItemStrings)
//Anzahl an Spalten entspricht Clipboard
if (lineItemString.Length == 19)
{
//Header ignorieren
if (lineItemString[0] == "#")
continue;
//Dateiinhalt in Klasse schreiben
LineItem lineItem =
new()
{
Position = ushort.Parse(lineItemString[0]),
ProductNumber = lineItemString[1],
OptionNumber = lineItemString[2],
ProductLine = lineItemString[3],
SapShortDescription = lineItemString[4],
Amount = ushort.Parse(lineItemString[5]),
ListPrice = decimal.Parse(lineItemString[6], cultureInfoUs),
TotalDiscount = decimal.Parse(lineItemString[9], cultureInfoUs),
NetPrice = decimal.Parse(lineItemString[10], cultureInfoUs),
Total = decimal.Parse(lineItemString[11], cultureInfoUs),
SalesDiscount = decimal.Parse(lineItemString[12], cultureInfoUs),
ContractualDiscount = decimal.Parse(lineItemString[13], cultureInfoUs),
PromotionalDiscount = decimal.Parse(lineItemString[14], cultureInfoUs),
DemoDiscount = decimal.Parse(lineItemString[15], cultureInfoUs)
};
lineItems.Add(lineItem);
}
else
{
Console.WriteLine("Angebot konnte nicht eingelesen werden!");
}
return lineItems;
}
private static byte CheckForAcademic(Account account)
{
if (account.AccountType?.AccountTypeCode == null)
return 60;
return (byte)(account.AccountType.AccountTypeCode.StartsWith("N") ? 90 : 60);
}
private static decimal GetFreight(decimal net, decimal freight)
{
decimal freightNet = net * freight / 100;
return freightNet < 3000 ? freightNet : 3000;
}
private static Quote CalculateTotals(Quote quote)
{
quote.TotalFreightOnly = GetFreight(quote.TotalNet, quote.Freight);
quote.TotalFreight = quote.TotalNet + quote.TotalFreightOnly;
quote.TotalVat = quote.TotalFreight * Convert.ToDecimal(quote.Vat) / 100;
quote.TotalGross = quote.TotalFreight * (100 + Convert.ToDecimal(quote.Vat)) / 100;
return quote;
}
private static Quote ResetTotals(Quote quote)
{
quote.TotalListprice = 0;
quote.TotalNet = 0;
quote.TotalFreightOnly = 0;
quote.TotalFreight = 0;
quote.TotalVat = 0;
quote.TotalGross = 0;
return quote;
}
private static decimal GetTotal(Quote quote, string type)
{
decimal total = 0;
if (quote.LineItems == null)
return total;
foreach (LineItem lineItem in quote.LineItems)
switch (type)
{
case "TotalListprice":
total += lineItem.ListPrice;
break;
case "TotalNet":
total += lineItem.Total;
break;
case "AverageDiscount":
total += lineItem.TotalDiscount;
break;
}
if ((type == "AverageDiscount") & (quote.LineItems.Count != 0))
total /= quote.LineItems.Count;
return total;
}
private static bool DoesContains(Quote quote, string type)
{
if (quote.LineItems == null)
return false;
foreach (LineItem lineItem in quote.LineItems)
switch (type)
{
case "3PP":
if (lineItem.ProductLine == "3PP")
{
Console.WriteLine(
$"Quote contains 3PP with ProductNumber {lineItem.ProductNumber}"
);
return true;
}
break;
case "RB":
if ((lineItem.ProductLine == "RB") & (lineItem.ProductNumber != "R2005A"))
{
Console.WriteLine(
$"Quote contains RB with ProductNumber {lineItem.ProductNumber}"
);
return true;
}
break;
}
return false;
}
public static async Task<StringBuilder?> CreateTex(Quote quote)
{
StringBuilder? texString = await TexService.CreateTex(quote);
if (texString == null)
{
return null;
}
Console.WriteLine(
texString.Length > 0
? "Creating TexFile succesfully."
: "Error during TexFile creation!"
);
return texString;
}
//FromWindowsGremlin
public static Quote ReadLineItems(Quote quote, string clipboard)
{
try
{
quote = ResetTotals(quote);
quote.LineItems = ReadLineItemsFromClipboard(clipboard);
quote.QuoteContains3Pp = DoesContains(quote, "3PP");
quote.QuoteContainsRb = DoesContains(quote, "RB");
quote.TotalListprice = GetTotal(quote, "TotalListprice");
quote.TotalDiscount = GetTotal(quote, "AverageDiscount");
quote.TotalNet = GetTotal(quote, "TotalNet");
if (quote.Recipient?.Account != null)
{
quote.ValidFor = CheckForAcademic(quote.Recipient.Account);
}
foreach (LineItem lineItem in quote.LineItems)
{
if (lineItem.OptionNumber == null)
{
break;
}
if (lineItem.OptionNumber.StartsWith("8D"))
{
quote.Warranty = int.Parse(lineItem.OptionNumber.Last().ToString()) * 12;
}
quote.Warranty = lineItem.OptionNumber switch
{
"9EC" => 24,
"9CC" => 36,
_ => quote.Warranty
};
}
quote = CalculateTotals(quote);
return quote;
}
catch (Exception e)
{
Console.WriteLine(e);
return new();
}
}
private static List<LineItem> ReadLineItemsFromClipboard(string clipboard)
{
//Zeilen aufteilen
IEnumerable<string> clipboardLines = clipboard.Split(Environment.NewLine.ToCharArray());
List<string[]> clipboardList = (
from clipboardLine in clipboardLines
where clipboardLine != ""
select clipboardLine.Split('\t')
).ToList();
return ParseClipboardList(clipboardList);
}
private static List<LineItem> ParseClipboardList(List<string[]> lineItemStrings)
{
List<LineItem> lineItems = new();
CultureInfo cultureInfoUs = new("en-US");
foreach (string[] lineItemString in lineItemStrings)
{
//Anzahl an Spalten entspricht Clipboard
if (lineItemString.Length == 19)
{
//Header ignorieren
if (lineItemString[0] == "#")
{
continue;
}
//Dateiinhalt in Klasse schreiben
LineItem lineItem =
new()
{
Position = ushort.Parse(lineItemString[0]),
ProductNumber = lineItemString[1],
OptionNumber = lineItemString[2],
ProductLine = lineItemString[3],
SapShortDescription = lineItemString[4],
Amount = ushort.Parse(lineItemString[5]),
ListPrice = decimal.Parse(lineItemString[6], cultureInfoUs),
TotalDiscount = decimal.Parse(lineItemString[9], cultureInfoUs),
NetPrice = decimal.Parse(lineItemString[10], cultureInfoUs),
Total = decimal.Parse(lineItemString[11], cultureInfoUs),
SalesDiscount = decimal.Parse(lineItemString[12], cultureInfoUs),
ContractualDiscount = decimal.Parse(lineItemString[13], cultureInfoUs),
PromotionalDiscount = decimal.Parse(lineItemString[14], cultureInfoUs),
DemoDiscount = decimal.Parse(lineItemString[15], cultureInfoUs)
};
lineItems.Add(lineItem);
}
else
{
Console.WriteLine("Angebot konnte nicht eingelesen werden!");
}
}
return lineItems;
}
private static byte CheckForAcademic(Account account)
{
return account.AccountType?.AccountTypeCode == null ? (byte)60 : (byte)(account.AccountType.AccountTypeCode.StartsWith("N") ? 90 : 60);
}
private static decimal GetFreight(decimal net, decimal freight)
{
decimal freightNet = net * freight / 100;
return freightNet < 3000 ? freightNet : 3000;
}
private static Quote CalculateTotals(Quote quote)
{
quote.TotalFreightOnly = GetFreight(quote.TotalNet, quote.Freight);
quote.TotalFreight = quote.TotalNet + quote.TotalFreightOnly;
quote.TotalVat = quote.TotalFreight * Convert.ToDecimal(quote.Vat) / 100;
quote.TotalGross = quote.TotalFreight * (100 + Convert.ToDecimal(quote.Vat)) / 100;
return quote;
}
private static Quote ResetTotals(Quote quote)
{
quote.TotalListprice = 0;
quote.TotalNet = 0;
quote.TotalFreightOnly = 0;
quote.TotalFreight = 0;
quote.TotalVat = 0;
quote.TotalGross = 0;
return quote;
}
private static decimal GetTotal(Quote quote, string type)
{
decimal total = 0;
if (quote.LineItems == null)
{
return total;
}
foreach (LineItem lineItem in quote.LineItems)
{
switch (type)
{
case "TotalListprice":
total += lineItem.ListPrice;
break;
case "TotalNet":
total += lineItem.Total;
break;
case "AverageDiscount":
total += lineItem.TotalDiscount;
break;
}
}
if ((type == "AverageDiscount") & (quote.LineItems.Count != 0))
{
total /= quote.LineItems.Count;
}
return total;
}
private static bool DoesContains(Quote quote, string type)
{
if (quote.LineItems == null)
{
return false;
}
foreach (LineItem lineItem in quote.LineItems)
{
switch (type)
{
case "3PP":
if (lineItem.ProductLine == "3PP")
{
Console.WriteLine(
$"Quote contains 3PP with ProductNumber {lineItem.ProductNumber}"
);
return true;
}
break;
case "RB":
if ((lineItem.ProductLine == "RB") & (lineItem.ProductNumber != "R2005A"))
{
Console.WriteLine(
$"Quote contains RB with ProductNumber {lineItem.ProductNumber}"
);
return true;
}
break;
}
}
return false;
}
}

@ -10,12 +10,12 @@ public abstract class TexService
{
private static readonly GenericController genericController = new();
public static StringBuilder? CreateTex(Quote quote)
public static async Task<StringBuilder?> CreateTex(Quote quote)
{
StringBuilder? texStringBuilder = CreateTexFile(quote);
StringBuilder? texStringBuilder = await Task.Run(() => CreateTexFile(quote));
if (texStringBuilder == null)
return null;
string correctedTex = Replace(texStringBuilder.ToString());
string correctedTex = await Task.Run(() => Replace(texStringBuilder.ToString()));
return new(correctedTex);
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

@ -0,0 +1,141 @@
\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-223-213}
\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-223-213\\
Angebotdatum:&\today\\
Angebotsgültigkeit:&60 Tage\\\textbf{Ansprechpartner:}&Sascha Woitschetzki\\
Telefon: &+49 208 74129134\\
Mobil:&+49 176 22285334\\
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) GC.\\
Es umfasst im Einzelnen:
\begin{itemize}
\item 8860 Gaschromatograph (\#1)
\begin{itemize}
\item S/SL-Kapillareinlass (\#2)
\item 7650A Autosampler (\#3)
\item Flammenionisationsdetektor (\#4)
\item Hydrogen Sensor Module Series 2 (\#5)
\end{itemize}
\item OpenLAB CDS 2 Workstation mit Software und Lizenzen, PC, Softwarewartungsvertrag: alle Updates und Upgrades, bevorzugter telefonischer Support. Laufzeit: 1 Jahr (\#6)
\begin{itemize}
\item Inkludierte Gerätelizenz (\#7)
\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.595\textwidth} crr |} \hline
\textbf{\#} & \textbf{Produktbeschreibung} (Produktnummer) & \textbf{Menge} & \textbf{Discount} & \textbf{Preis}\\ \hline \endhead
1 &\textbf{8860 Gaschromatograph} (G2790A)\newline Agilent 8860 GC-System.\newline Listenpreis: \SI{15152}{\sieuro}&1&\SI{45}{\%}&\SI{8333.6}{\sieuro}\\
2 &\textbf{S/SL-Kapillareinlass} (G2790A\#163)\newline S/SL-Kapillareinlass mit EPC für 8860.\newline Listenpreis: \SI{2542}{\sieuro}&1&\SI{45}{\%}&\SI{1398.1}{\sieuro}\\
3 &\textbf{7650A Autosampler} (G2790A\#205)\newline Flüssigprobengeber mit 50 Probenplätze für 2.0 ml Vials.\newline Listenpreis: \SI{13289}{\sieuro}&1&\SI{45}{\%}&\SI{7308.95}{\sieuro}\\
4 &\textbf{Flammenionisationsdetektor} (G2790A\#210)\newline FID mit EPC für 8860.\newline Listenpreis: \SI{3369}{\sieuro}&1&\SI{45}{\%}&\SI{1852.95}{\sieuro}\\
5 &\textbf{Hydrogen Sensor Module Series 2} (G2790A\#324)\newline \newline Listenpreis: \SI{3780}{\sieuro}&1&\SI{45}{\%}&\SI{2079}{\sieuro}\\
6 &\textbf{OpenLab CDS 2 Workstation Bundle} (M8414AA)\newline OpenLab CDS Workstation-Software, dateibasiert, \newline inklusive 2 Geräteverbindungslizenzen, 1 Jahr Software-Wartungsvertrag sowie telefonischem Support und Workstation-PC.\newline Listenpreis: \SI{17697}{\sieuro}&1&\SI{45}{\%}&\SI{9733.35}{\sieuro}\\
7 &\textbf{Inkludierte Gerätelizenz} (M8414AA\#002)\newline Für ein Agilent GC-System.\newline Listenpreis: \SI{0}{\sieuro}&1&\SI{45}{\%}&\SI{0}{\sieuro}\\
\hline
\end{longtable}
\end{center}
\vspace{-2cm}
\begin{flushright}
\begin{tabular}{|rr|}
\hline
\textbf{Summe netto} & \SI{30705.95}{\sieuro}\\
\textbf{Versand und Bereitstellungskosten (3\%)} & \SI{921.1785}{\sieuro}\\
\textbf{Gesamtsumme netto} & \SI{31627.1285}{\sieuro}\\
\textbf{Umsatzsteuer (19\%)} & \SI{6009.154415}{\sieuro}\\
\textbf{Gesamtsumme brutto} & \SI{37636.282915}{\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,8 @@
# 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 G2790A AZ Agilent 8860 GC-System Kundenspezifisch 1 15152 0 0 45 8333.6 8333.6 45 0 0 0 ISG700G700 6820 GC system
2 G2790A 163 AZ S/SL-Kapillareinlass mit EPC fuer 8860 1 2542 0 0 45 1398.1 1398.1 45 0 0 0
3 G2790A 205 AZ 7650A 50-Probenflasche ALS 1 13289 0 0 45 7308.95 7308.95 45 0 0 0
4 G2790A 210 AZ FID mit EPC fuer 8860 1 3369 0 0 45 1852.95 1852.95 45 0 0 0
5 G2790A 324 AZ Hydrogen Sensor Module Series 2 1 3780 0 0 45 2079 2079 45 0 0 0
6 M8414AA LI OpenLab CDS Workstation PC-Paket 1 17697 0 0 45 9733.35 9733.35 45 0 0 0 ISF300F110 OpenLAB CDS w/Hardware
7 M8414AA 002 LI GC Geraeteverbindung 1 0 0 0 45 0 0 45 0 0 0
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 G2790A AZ Agilent 8860 GC-System Kundenspezifisch 1 15152 0 0 45 8333.6 8333.6 45 0 0 0 ISG700G700 6820 GC system
3 2 G2790A 163 AZ S/SL-Kapillareinlass mit EPC fuer 8860 1 2542 0 0 45 1398.1 1398.1 45 0 0 0
4 3 G2790A 205 AZ 7650A 50-Probenflasche ALS 1 13289 0 0 45 7308.95 7308.95 45 0 0 0
5 4 G2790A 210 AZ FID mit EPC fuer 8860 1 3369 0 0 45 1852.95 1852.95 45 0 0 0
6 5 G2790A 324 AZ Hydrogen Sensor Module Series 2 1 3780 0 0 45 2079 2079 45 0 0 0
7 6 M8414AA LI OpenLab CDS Workstation PC-Paket 1 17697 0 0 45 9733.35 9733.35 45 0 0 0 ISF300F110 OpenLAB CDS w/Hardware
8 7 M8414AA 002 LI GC Geraeteverbindung 1 0 0 0 45 0 0 45 0 0 0

@ -0,0 +1,141 @@
\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-223-214}
\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-223-214\\
Angebotdatum:&\today\\
Angebotsgültigkeit:&60 Tage\\\textbf{Ansprechpartner:}&Sascha Woitschetzki\\
Telefon: &+49 208 74129134\\
Mobil:&+49 176 22285334\\
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) Gerät.\\
Es umfasst im Einzelnen:
\begin{itemize}
\item 8860 Gaschromatograph (\#1)
\begin{itemize}
\item S/SL-Kapillareinlass (\#2)
\item 7650A Autosampler (\#3)
\item Flammenionisationsdetektor (\#4)
\item Hydrogen Sensor Module Series 2 (\#5)
\end{itemize}
\item OpenLAB CDS 2 Workstation mit Software und Lizenzen, PC, Softwarewartungsvertrag: alle Updates und Upgrades, bevorzugter telefonischer Support. Laufzeit: 1 Jahr (\#6)
\begin{itemize}
\item Inkludierte Gerätelizenz (\#7)
\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.595\textwidth} crr |} \hline
\textbf{\#} & \textbf{Produktbeschreibung} (Produktnummer) & \textbf{Menge} & \textbf{Discount} & \textbf{Preis}\\ \hline \endhead
1 &\textbf{8860 Gaschromatograph} (G2790A)\newline Agilent 8860 GC-System.\newline Listenpreis: \SI{15152}{\sieuro}&1&\SI{45}{\%}&\SI{8333.6}{\sieuro}\\
2 &\textbf{S/SL-Kapillareinlass} (G2790A\#163)\newline S/SL-Kapillareinlass mit EPC für 8860.\newline Listenpreis: \SI{2542}{\sieuro}&1&\SI{45}{\%}&\SI{1398.1}{\sieuro}\\
3 &\textbf{7650A Autosampler} (G2790A\#205)\newline Flüssigprobengeber mit 50 Probenplätze für 2.0 ml Vials.\newline Listenpreis: \SI{13289}{\sieuro}&1&\SI{45}{\%}&\SI{7308.95}{\sieuro}\\
4 &\textbf{Flammenionisationsdetektor} (G2790A\#210)\newline FID mit EPC für 8860.\newline Listenpreis: \SI{3369}{\sieuro}&1&\SI{45}{\%}&\SI{1852.95}{\sieuro}\\
5 &\textbf{Hydrogen Sensor Module Series 2} (G2790A\#324)\newline \newline Listenpreis: \SI{3780}{\sieuro}&1&\SI{45}{\%}&\SI{2079}{\sieuro}\\
6 &\textbf{OpenLab CDS 2 Workstation Bundle} (M8414AA)\newline OpenLab CDS Workstation-Software, dateibasiert, \newline inklusive 2 Geräteverbindungslizenzen, 1 Jahr Software-Wartungsvertrag sowie telefonischem Support und Workstation-PC.\newline Listenpreis: \SI{17697}{\sieuro}&1&\SI{45}{\%}&\SI{9733.35}{\sieuro}\\
7 &\textbf{Inkludierte Gerätelizenz} (M8414AA\#002)\newline Für ein Agilent GC-System.\newline Listenpreis: \SI{0}{\sieuro}&1&\SI{45}{\%}&\SI{0}{\sieuro}\\
\hline
\end{longtable}
\end{center}
\vspace{-2cm}
\begin{flushright}
\begin{tabular}{|rr|}
\hline
\textbf{Summe netto} & \SI{30705.95}{\sieuro}\\
\textbf{Versand und Bereitstellungskosten (3\%)} & \SI{921.1785}{\sieuro}\\
\textbf{Gesamtsumme netto} & \SI{31627.1285}{\sieuro}\\
\textbf{Umsatzsteuer (19\%)} & \SI{6009.154415}{\sieuro}\\
\textbf{Gesamtsumme brutto} & \SI{37636.282915}{\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,9 @@
# 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 G2790A AZ Agilent 8860 GC-System Kundenspezifisch 1 15152 0 0 45 8333.6 8333.6 45 0 0 0 ISG700G700 6820 GC system
2 G2790A 163 AZ S/SL-Kapillareinlass mit EPC fuer 8860 1 2542 0 0 45 1398.1 1398.1 45 0 0 0
3 G2790A 205 AZ 7650A 50-Probenflasche ALS 1 13289 0 0 45 7308.95 7308.95 45 0 0 0
4 G2790A 210 AZ FID mit EPC fuer 8860 1 3369 0 0 45 1852.95 1852.95 45 0 0 0
5 G2790A 324 AZ Hydrogen Sensor Module Series 2 1 3780 0 0 45 2079 2079 45 0 0 0
6 M8414AA LI OpenLab CDS Workstation PC-Paket 1 17697 0 0 45 9733.35 9733.35 45 0 0 0 ISF300F110 OpenLAB CDS w/Hardware
7 M8414AA 002 LI GC Geraeteverbindung 1 0 0 0 45 0 0 45 0 0 0
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 G2790A AZ Agilent 8860 GC-System Kundenspezifisch 1 15152 0 0 45 8333.6 8333.6 45 0 0 0 ISG700G700 6820 GC system
3 2 G2790A 163 AZ S/SL-Kapillareinlass mit EPC fuer 8860 1 2542 0 0 45 1398.1 1398.1 45 0 0 0
4 3 G2790A 205 AZ 7650A 50-Probenflasche ALS 1 13289 0 0 45 7308.95 7308.95 45 0 0 0
5 4 G2790A 210 AZ FID mit EPC fuer 8860 1 3369 0 0 45 1852.95 1852.95 45 0 0 0
6 5 G2790A 324 AZ Hydrogen Sensor Module Series 2 1 3780 0 0 45 2079 2079 45 0 0 0
7 6 M8414AA LI OpenLab CDS Workstation PC-Paket 1 17697 0 0 45 9733.35 9733.35 45 0 0 0 ISF300F110 OpenLAB CDS w/Hardware
8 7 M8414AA 002 LI GC Geraeteverbindung 1 0 0 0 45 0 0 45 0 0 0

@ -0,0 +1,141 @@
\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-223-213}
\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-223-213\\
Angebotdatum:&\today\\
Angebotsgültigkeit:&60 Tage\\\textbf{Ansprechpartner:}&Sascha Woitschetzki\\
Telefon: &+49 208 74129134\\
Mobil:&+49 176 22285334\\
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) Gerät.\\
Es umfasst im Einzelnen:
\begin{itemize}
\item 8860 Gaschromatograph (\#1)
\begin{itemize}
\item S/SL-Kapillareinlass (\#2)
\item 7650A Autosampler (\#3)
\item Flammenionisationsdetektor (\#4)
\item Hydrogen Sensor Module Series 2 (\#5)
\end{itemize}
\item OpenLAB CDS 2 Workstation mit Software und Lizenzen, PC, Softwarewartungsvertrag: alle Updates und Upgrades, bevorzugter telefonischer Support. Laufzeit: 1 Jahr (\#6)
\begin{itemize}
\item Inkludierte Gerätelizenz (\#7)
\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.595\textwidth} crr |} \hline
\textbf{\#} & \textbf{Produktbeschreibung} (Produktnummer) & \textbf{Menge} & \textbf{Discount} & \textbf{Preis}\\ \hline \endhead
1 &\textbf{8860 Gaschromatograph} (G2790A)\newline Agilent 8860 GC-System.\newline Listenpreis: \SI{15152}{\sieuro}&1&\SI{45}{\%}&\SI{8333.6}{\sieuro}\\
2 &\textbf{S/SL-Kapillareinlass} (G2790A\#163)\newline S/SL-Kapillareinlass mit EPC für 8860.\newline Listenpreis: \SI{2542}{\sieuro}&1&\SI{45}{\%}&\SI{1398.1}{\sieuro}\\
3 &\textbf{7650A Autosampler} (G2790A\#205)\newline Flüssigprobengeber mit 50 Probenplätze für 2.0 ml Vials.\newline Listenpreis: \SI{13289}{\sieuro}&1&\SI{45}{\%}&\SI{7308.95}{\sieuro}\\
4 &\textbf{Flammenionisationsdetektor} (G2790A\#210)\newline FID mit EPC für 8860.\newline Listenpreis: \SI{3369}{\sieuro}&1&\SI{45}{\%}&\SI{1852.95}{\sieuro}\\
5 &\textbf{Hydrogen Sensor Module Series 2} (G2790A\#324)\newline \newline Listenpreis: \SI{3780}{\sieuro}&1&\SI{45}{\%}&\SI{2079}{\sieuro}\\
6 &\textbf{OpenLab CDS 2 Workstation Bundle} (M8414AA)\newline OpenLab CDS Workstation-Software, dateibasiert, \newline inklusive 2 Geräteverbindungslizenzen, 1 Jahr Software-Wartungsvertrag sowie telefonischem Support und Workstation-PC.\newline Listenpreis: \SI{17697}{\sieuro}&1&\SI{45}{\%}&\SI{9733.35}{\sieuro}\\
7 &\textbf{Inkludierte Gerätelizenz} (M8414AA\#002)\newline Für ein Agilent GC-System.\newline Listenpreis: \SI{0}{\sieuro}&1&\SI{45}{\%}&\SI{0}{\sieuro}\\
\hline
\end{longtable}
\end{center}
\vspace{-2cm}
\begin{flushright}
\begin{tabular}{|rr|}
\hline
\textbf{Summe netto} & \SI{30705.95}{\sieuro}\\
\textbf{Versand und Bereitstellungskosten (3\%)} & \SI{921.1785}{\sieuro}\\
\textbf{Gesamtsumme netto} & \SI{31627.1285}{\sieuro}\\
\textbf{Umsatzsteuer (19\%)} & \SI{6009.154415}{\sieuro}\\
\textbf{Gesamtsumme brutto} & \SI{37636.282915}{\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,8 @@
# 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 G2790A AZ Agilent 8860 GC-System Kundenspezifisch 1 15152 0 0 45 8333.6 8333.6 45 0 0 0 ISG700G700 6820 GC system
2 G2790A 163 AZ S/SL-Kapillareinlass mit EPC fuer 8860 1 2542 0 0 45 1398.1 1398.1 45 0 0 0
3 G2790A 205 AZ 7650A 50-Probenflasche ALS 1 13289 0 0 45 7308.95 7308.95 45 0 0 0
4 G2790A 210 AZ FID mit EPC fuer 8860 1 3369 0 0 45 1852.95 1852.95 45 0 0 0
5 G2790A 324 AZ Hydrogen Sensor Module Series 2 1 3780 0 0 45 2079 2079 45 0 0 0
6 M8414AA LI OpenLab CDS Workstation PC-Paket 1 17697 0 0 45 9733.35 9733.35 45 0 0 0 ISF300F110 OpenLAB CDS w/Hardware
7 M8414AA 002 LI GC Geraeteverbindung 1 0 0 0 45 0 0 45 0 0 0
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 G2790A AZ Agilent 8860 GC-System Kundenspezifisch 1 15152 0 0 45 8333.6 8333.6 45 0 0 0 ISG700G700 6820 GC system
3 2 G2790A 163 AZ S/SL-Kapillareinlass mit EPC fuer 8860 1 2542 0 0 45 1398.1 1398.1 45 0 0 0
4 3 G2790A 205 AZ 7650A 50-Probenflasche ALS 1 13289 0 0 45 7308.95 7308.95 45 0 0 0
5 4 G2790A 210 AZ FID mit EPC fuer 8860 1 3369 0 0 45 1852.95 1852.95 45 0 0 0
6 5 G2790A 324 AZ Hydrogen Sensor Module Series 2 1 3780 0 0 45 2079 2079 45 0 0 0
7 6 M8414AA LI OpenLab CDS Workstation PC-Paket 1 17697 0 0 45 9733.35 9733.35 45 0 0 0 ISF300F110 OpenLAB CDS w/Hardware
8 7 M8414AA 002 LI GC Geraeteverbindung 1 0 0 0 45 0 0 45 0 0 0