public async Task <IActionResult> Edit(int id, [Bind("ID,AccountOwner,Institute,Iban,SwiftBic")] BankAcccount bankAcccount)
        {
            if (id != bankAcccount.ID)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(bankAcccount);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!BankAcccountExists(bankAcccount.ID))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(bankAcccount));
        }
        public async Task <IActionResult> Create([Bind("ID,AccountOwner,Institute,Iban,SwiftBic")] BankAcccount bankAcccount)
        {
            if (ModelState.IsValid)
            {
                _context.Add(bankAcccount);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(bankAcccount));
        }
        public async Task <IActionResult> EMailSend([Bind("OrderID, Email, Subject, Message, Attachments")] OrderEmailViewModel orderEmail)
        {
            if (ModelState.IsValid)
            {
                OrderViewModel vm   = null;
                BankAcccount   bank = null;

                if (orderEmail.OrderID == null)
                {
                    return(NotFound());
                }
                else
                {
                    vm = await GetOrderViewModel(orderEmail.OrderID);

                    bank = await _context.BankAcccounts.FirstOrDefaultAsync();

                    string bill = $"<h2>Hallo Frau/Herr {vm.CutomerLastName},</h2>" +
                                  $"<p>noch einmal vielen Dank für Ihren Einkauf.</p>" +
                                  $"<p>Bitte überweisen Sie den Gesamtbetrag von <b>{Math.Round(vm.Total, 2)} &euro;</b> innerhalb von 7 Tagen unter Angabe der Rechungsnummer:<br/>" +
                                  $"<b>{orderEmail.Message}</b><br />" +
                                  $"auf das folgende Konto:</p>" +
                                  $"<br />" +
                                  $"<p>Kontoinhaber:<b> {bank.AccountOwner}</b><br />" +
                                  $"IBAN: <b>{bank.Iban}</b><br />" +
                                  $"SWIFT-BIC: <b>{bank.SwiftBic}</b><br />" +
                                  $"Bank: <b>{bank.Institute}</b></p><br />";
                    bill += $"<hr /><h3>Rechungsdetails</h3>" +
                            $"<p>Ihre Bestellung vom {vm.OrderDate.ToShortDateString()}</p>";
                    if (!string.IsNullOrWhiteSpace(vm.FreeText))
                    {
                        bill += $"<p>Ihre Angaben zur Bestellung: <b>{vm.FreeText}</b></p>";
                    }
                    bill += $"<table border=\"1\" cellpadding=\"0\" cellspacing=\"0\" height=\"15%\" width=\"75%\"><tr><th>Position</th><th>Artikel-Nr.</th><th>Artikelname</th><th>Menge</th><th>Betrag</th></tr>";
                    foreach (var item in vm.OderLines)
                    {
                        bill += $"<tr><td align=\"center\">{item.Position}</td>" +
                                $"<td align=\"center\">{item.ProductNumber}</td>" +
                                $"<td align=\"center\">{item.ProductName}</td>" +
                                $"<td align=\"center\">{Math.Round(item.OrderQuantity, 2)} {item.OrderUnit}</td>" +
                                $"<td align=\"center\">{Math.Round(item.OrderLineTotal,2)} &euro;</td></tr>";
                    }
                    bill += $"</table><br />" +
                            $"<table cellpadding=\"0\" cellspacing=\"1\" height=\"5%\" width=\"85%\">" +
                            $"<tr>" +
                            $"<td align=\"right\" colspan=\"4\">Versand, {vm.ShippingPriceName}:</td>" +
                            $"<td>{Math.Round(vm.ShippingPriceAtOrder,2)} &euro;</td></tr>" +
                            $"<tr>" +
                            $"<td align=\"right\" colspan=\"4\">Gesamtbetrag:</td><td>{Math.Round(vm.Total,2)} &euro;</td></tr>" +
                            $"</table>" +
                            $"<br />" +
                            $"<p>Die Lieferfrist beginnt mit der Zahlungsanweisung.</p>" +
                            $"<br />" +
                            $"<p>Viele Gr&uuml;&szlig;e,</p><p>Petra Buron</p><br />";
                    var attachments = new List <string>();
                    var files       = HttpContext.Request.Form.Files;
                    if (files != null && files.Count > 0)
                    {
                        //var file = files.First();
                        var helper = new UploadHelper(_environment);
                        var todel  = new List <string>();


                        foreach (var file in files)
                        {
                            var fnames = await helper.FileUploadAsync(file, "files", false);

                            todel.Add(fnames.Filename);
                            attachments.Add(fnames.Filename);
                        }

                        foreach (string file in todel)
                        {
                            helper.DeleteFile("files", file);
                        }
                    }

                    var agb = await _context.ShopFiles.SingleAsync(s => s.ShopFileType == Enums.ShopFileTypeEnum.AGB);

                    var wiederruf = await _context.ShopFiles.SingleAsync(s => s.ShopFileType == Enums.ShopFileTypeEnum.WRB);

                    var datenschutz = await _context.ShopFiles.SingleAsync(s => s.ShopFileType == Enums.ShopFileTypeEnum.DSK);

                    attachments.Add(agb.Filename);
                    attachments.Add(wiederruf.Filename);
                    attachments.Add(datenschutz.Filename);

                    await _emailSender.SendEmailWithAttachmentsAsync(orderEmail.Email, orderEmail.Subject, bill, attachments);

                    return(RedirectToAction(nameof(Index)));
                }
            }
            return(View(orderEmail));
        }
        private async Task <WeHaveYourOrderViewModel> GetViewModel(Guid id)
        {
            var myorder = await _context.Orders.SingleAsync(o => o.ID == id);

            var paymend = await _context.Paymends.SingleAsync(p => p.ID == myorder.PaymentID);

            var shippingAddress = await _context.ShippingAddresses.SingleAsync(a => a.ID == myorder.ShippingAddressId);

            var invioceAddress = await _context.ShippingAddresses.FirstOrDefaultAsync(a => a.CustomerID == myorder.CustomerID && a.IsInvoiceAddress);

            var period = await _context.ShpippingPeriods.SingleAsync(p => p.ShippingPeriodID == myorder.ShippingPeriodId);

            var shipPrice = await _context.ShippingPrices.SingleAsync(p => p.ID == myorder.ShippingPriceId);

            var olines = await _context.OrderLines.Where(ol => ol.OrderID.Equals(myorder.ID)).ToListAsync();

            List <WeHaveYourOrderLineViewModel> lineViewModels = new List <WeHaveYourOrderLineViewModel>();

            foreach (var item in olines)
            {
                var prod = await _context.Products.SingleAsync(p => p.ProductID == item.ProductID);

                var img = await _context.ProductImages.SingleAsync(p => p.IsMainImage && p.ProductID == item.ProductID);

                var unit = await _context.Units.SingleAsync(u => u.UnitID == prod.BasesUnitID);

                var line = new WeHaveYourOrderLineViewModel
                {
                    ID            = item.OrderLineID,
                    ImagePath     = img.ImageUrl,
                    Position      = item.Position,
                    Price         = Math.Round((item.SellBasePrice * item.Quantity), 2),
                    ProductName   = prod.Name,
                    ProductNumber = prod.ProductNumber,
                    Quantity      = Math.Round(item.Quantity, 2),
                    ProductUnit   = unit.Name
                };

                lineViewModels.Add(line);
            }


            BankAcccount bank = null;

            var shipTo = addressHelper.GetViewModel(shippingAddress);

            ShippingAddressViewModel invoiceVm = null;

            if (invioceAddress == null)
            {
                var customer = await _context.Customers.SingleAsync(c => c.CustomerID == myorder.CustomerID);

                invoiceVm = addressHelper.GetViewModel(customer);
            }
            else
            {
                invoiceVm = addressHelper.GetViewModel(invioceAddress);
            }

            string thankyou = await GetThankyou(paymend);

            WeHaveYourOrderViewModel viewModel = new WeHaveYourOrderViewModel
            {
                OrderID              = myorder.ID,
                OrderDate            = myorder.OrderDate,
                OrderNo              = myorder.Number,
                OrderPaymend         = paymend.Name,
                OrderShippingAddress = shipTo,
                OrderInvoiceAddress  = invoiceVm,
                OrderShippingPeriod  = period.Decription,
                Bank          = bank,
                OrderTotal    = Math.Round(myorder.Total, 2),
                OrderThankYou = thankyou,
                ShipPrice     = Math.Round(myorder.ShippingPrice, 2),
                ShipPriceName = shipPrice.Name,
                OrderLines    = lineViewModels,
                FreeText      = myorder.FreeText
            };

            return(viewModel);
        }