public IActionResult CreateBanner(IFormCollection formData, IFormFile bannerImage, IFormFile mobileBannerImage)
        {
            var bannerName            = $"{formData["BannerName"]}";
            var expiryDate            = DateTime.Parse($"{formData["ExpiryDate"]}");
            var bannerImagePath       = string.Empty;
            var mobileBannerImagePath = string.Empty;

            var acceptedMimes = new List <string> {
                ".jpg", ".jpeg", ".png", ".gif"
            };

            try
            {
                var mobileBannerImageExtension = $".{mobileBannerImage.FileName.Split('.')[1]}";
                var bannerImageExtension       = $".{bannerImage.FileName.Split('.')[1]}";

                var mobileMimeMatch = acceptedMimes.FirstOrDefault(check => check.Contains(mobileBannerImageExtension));
                var bannerMimeMatch = acceptedMimes.FirstOrDefault(check => check.Contains(bannerImageExtension));

                if (mobileMimeMatch == null || bannerMimeMatch == null)
                {
                    throw new Exception("Apenas imagens no formato *.jpg, *.jpeg, *.gif ou *.png podem ser cadastradas!");
                }

                if (bannerImage != null)
                {
                    var fileName = $"{Guid.NewGuid() + bannerImageExtension}";

                    var newFileName = Path.Combine(_environment.WebRootPath, "img\\banners") + $@"\{fileName}";

                    bannerImagePath = $"http://www.pro-mobile.ml/img/banners/{fileName}";

                    using (FileStream fs = System.IO.File.Create(newFileName))
                    {
                        bannerImage.CopyTo(fs);
                        fs.Flush();
                    }
                }

                if (mobileBannerImage != null)
                {
                    var fileName = $"{Guid.NewGuid() + mobileBannerImageExtension}";

                    var newFileName = Path.Combine(_environment.WebRootPath, "img\\banners") + $@"\{fileName}";

                    mobileBannerImagePath = $"http://www.pro-mobile.ml/img/banners/{fileName}";

                    using (FileStream fs = System.IO.File.Create(newFileName))
                    {
                        mobileBannerImage.CopyTo(fs);
                        fs.Flush();
                    }
                }

                var newBanner = new Banner
                {
                    Status          = Status.Active,
                    Name            = bannerName,
                    RegionDivision  = (RegionDivision)Enum.Parse(typeof(RegionDivision), $"{User.Claims.Where(c => c.Type == "RegionDivision").Select(c => c.Value).FirstOrDefault()}"),
                    CreatedAt       = DateTime.Now,
                    ExpiryDate      = expiryDate,
                    ImagePath       = bannerImagePath,
                    MobileImagePath = mobileBannerImagePath
                };

                _db.Banners.Add(newBanner);
                _db.SaveChanges();
            }
            catch (Exception e)
            {
                return(RedirectToAction("Create", "Banners", new { errorMessage = $"Houve um erro ao cadastrar e salvar o novo banner! Erro: {e.Message}" }));
            }

            return(RedirectToAction("Create", "Banners", new { successMessage = $"Novo banner cadastrado com sucesso!" }));
        }
        public IActionResult CreateProduct(IFormCollection formData, IFormFile productImage)
        {
            var acceptedMimes = new List <string> {
                ".jpg", ".jpeg", ".png", ".gif"
            };

            using (var dbTransaction = _db.Database.BeginTransaction())
            {
                try
                {
                    var productName          = $"{formData["ProductName"]}";
                    var productHash          = $"{Guid.NewGuid()}";
                    var featuredText         = $"{formData["FeaturedText"]}";
                    var productCategory      = Convert.ToInt32(formData["ProductCategory"]);
                    var inCashPrice          = Convert.ToDecimal(Convert.ToString(formData["InCashPrice"]).Replace("R$ ", ""));
                    var parcelValue          = Convert.ToDecimal(Convert.ToString(formData["ParcelValue"]).Replace("R$ ", ""));
                    var forwardedPrice       = Convert.ToDecimal(Convert.ToString(formData["ForwardedPrice"]).Replace("R$ ", ""));
                    var yearlyTax            = Convert.ToDecimal(Convert.ToString(formData["YearlyTax"]).Replace("%", ""));
                    var monthlyTax           = Convert.ToDecimal(Convert.ToString(formData["MonthlyTax"]).Replace("%", ""));
                    var inputParcelsQuantity = Convert.ToInt32(formData["InputParcelsQuantity"]);
                    var parcelsQuantity      = Convert.ToInt32(formData["ParcelsQuantity"]);
                    var expiryDate           = DateTime.Parse($"{formData["ExpiryDate"]}");
                    var imagePath            = string.Empty;

                    var qrGenerator  = new QRCodeGenerator();
                    var qrCodeData   = qrGenerator.CreateQrCode(productHash, QRCodeGenerator.ECCLevel.Q);
                    var qrCode       = new Base64QRCode(qrCodeData);
                    var qrCodeString = qrCode.GetGraphic(10);

                    if (productImage != null)
                    {
                        var imageExtension = $".{productImage.FileName.Split('.')[1]}";

                        var bannerMimeMatch = acceptedMimes.FirstOrDefault(check => check.Contains(imageExtension));

                        if (bannerMimeMatch == null)
                        {
                            throw new Exception("Apenas imagens no formato *.jpg, *.jpeg, *.gif ou *.png podem ser cadastradas!");
                        }

                        var fileName = $"{Guid.NewGuid() + imageExtension}";

                        var newFileName = Path.Combine(_environment.WebRootPath, "img\\products") + $@"\{fileName}";

                        imagePath = $"http://www.pro-mobile.ml/img/products/{fileName}";

                        using (var fs = System.IO.File.Create(newFileName))
                        {
                            productImage.CopyTo(fs);
                            fs.Flush();
                        }
                    }

                    var newProduct = new PromotionalProduct
                    {
                        ProductCategory      = _db.ProductCategories.FirstOrDefault(c => c.Id == productCategory),
                        ProductHash          = productHash,
                        Name                 = productName,
                        FeaturedOptionalText = featuredText,
                        CreatedAt            = DateTime.Now,
                        ExpiryDate           = expiryDate,
                        ForwardedPrice       = forwardedPrice,
                        InCashPrice          = inCashPrice,
                        ParcelValue          = parcelValue,
                        ImagePath            = imagePath,
                        InputParcelsQuantity = inputParcelsQuantity,
                        ParcelsQuantity      = parcelsQuantity,
                        MonthlyTax           = monthlyTax,
                        YearlyTax            = yearlyTax,
                        Status               = Status.Active,
                        RegionDivision       = (RegionDivision)Enum.Parse(typeof(RegionDivision), $"{User.Claims.Where(c => c.Type == "RegionDivision").Select(c => c.Value).FirstOrDefault()}"),
                        QrCodeString         = qrCodeString
                    };

                    _db.PromotionalProducts.Add(newProduct);
                    _db.SaveChanges();
                    dbTransaction.Commit();
                }
                catch (Exception e)
                {
                    dbTransaction.Rollback();
                    return(RedirectToAction("Create", "Products", new { errorMessage = $"Houve um erro ao cadastrar e salvar o novo produto! Erro: {e.Message}" }));
                }
            }

            return(RedirectToAction("Create", "Products", new { successMessage = $"Novo produto cadastrado com sucesso!" }));
        }