// GET: Users/Details/5
        public async Task <IActionResult> Details(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            User user = await _context.User.FindAsync(id);

            user.OrderNumber   = user.UserId.ToString().PadLeft(8, '0');
            user.AttnName      = user.AttnName.ToUpper();
            user.PhoneNumber   = String.Format("{0:(###) ###-####}", user.PhoneNumber);
            user.Address1      = user.Address1.ToUpper();
            user.Address2      = !string.IsNullOrEmpty(user.Address2) ? user.Address2 : " ";
            user.City          = user.City.ToUpper();
            user.ProvinceState = user.ProvinceState.ToUpper();
            user.PostalZip     = user.PostalZip.ToUpper();
            user.Country       = user.Country.ToUpper();
            AlternatePonumbers alternatePonumbers = _context.AlternatePonumbers.Where(x => x.UserId == user.UserId).FirstOrDefault();

            if (alternatePonumbers != null)
            {
                user.PoNumber  = alternatePonumbers.AlternatePonumber;
                user.WorkOrder = alternatePonumbers.Wo;
            }
            int fabric = 0;
            int mesh   = 0;
            int frame  = 0;
            List <UserSelection> userSelections = await _context.UserSelection.Where(x => x.UserId == id).ToListAsync();

            ProductOption productOption;

            foreach (var item in userSelections)
            {
                productOption = await _context.ProductOption.Where(x => x.ProductOptionId == item.ProductOptionId).FirstOrDefaultAsync();

                if (item.Type == "Fabric")
                {
                    fabric     = item.ProductOptionId;
                    item.Image = productOption.Image;
                    item.Name  = productOption.Name;
                }
                if (item.Type == "Mesh")
                {
                    mesh       = item.ProductOptionId;
                    item.Image = productOption.Image;
                    item.Name  = productOption.Name;
                }
                if (item.Type == "Frame")
                {
                    frame      = item.ProductOptionId;
                    item.Image = productOption.Image;
                    item.Name  = productOption.Name;
                }
            }
            Production production = new Production
            {
                User           = user,
                Product        = await _context.Product.FindAsync(user.ProductId),
                UserSelections = userSelections,
                Image          = await _context.ProductImage.Where(x => x.ProductId == user.ProductId && x.ProductOption1Id == fabric && x.ProductOption2Id == mesh && x.ProductOption3Id == frame).Select(y => y.Image).FirstOrDefaultAsync()
            };

            if (production.Image == null)
            {
                production.Image = production.Product.Image;
            }

            return(View(production));
        }
        public async Task <byte[]> GetOrderPdf(int id, string trackingnumber)
        {
            Production production = new Production();
            int        fabric     = 0;
            int        mesh       = 0;
            int        frame      = 0;

            production.User = await _context.User.FindAsync(id);

            AlternatePonumbers alternatePonumbers = _context.AlternatePonumbers.Where(x => x.UserId == production.User.UserId).FirstOrDefault();

            if (alternatePonumbers != null)
            {
                production.User.PoNumber  = alternatePonumbers.AlternatePonumber;
                production.User.WorkOrder = alternatePonumbers.Wo;
            }
            List <UserSelection> userSelections = await _context.UserSelection.Where(x => x.UserId == id).ToListAsync();

            ProductOption productOption;

            foreach (var item in userSelections)
            {
                productOption = await _context.ProductOption.Where(x => x.ProductOptionId == item.ProductOptionId).FirstOrDefaultAsync();

                if (item.Type == "Fabric")
                {
                    fabric     = item.ProductOptionId;
                    item.Image = productOption.Image;
                    item.Name  = productOption.Name;
                }
                if (item.Type == "Mesh")
                {
                    mesh       = item.ProductOptionId;
                    item.Image = productOption.Image;
                    item.Name  = productOption.Name;
                }
                if (item.Type == "Frame")
                {
                    frame      = item.ProductOptionId;
                    item.Image = productOption.Image;
                    item.Name  = productOption.Name;
                }
            }
            production.UserSelections   = userSelections;
            production.User.PhoneNumber = String.Format("{0:(###) ###-####}", production.User.PhoneNumber);
            production.Image            = await _context.ProductImage.Where(x => x.ProductId == production.User.ProductId && x.ProductOption1Id == fabric && x.ProductOption2Id == mesh && x.ProductOption3Id == frame).Select(y => y.Image).FirstOrDefaultAsync();

            if (production.Image == null)
            {
                production.Image = await _context.Product.Where(x => x.ProductId == production.User.ProductId).Select(y => y.Image).FirstOrDefaultAsync();
            }
            production.User.OrderNumber    = production.User.UserId.ToString().PadLeft(8, '0');
            production.User.TrackingNumber = trackingnumber;

            var report = new ViewAsPdf("ShipPdf", production)
            {
                PageSize        = Rotativa.AspNetCore.Options.Size.Letter,
                PageOrientation = Rotativa.AspNetCore.Options.Orientation.Landscape,
                PageMargins     = new Rotativa.AspNetCore.Options.Margins(10, 0, 0, 10),
                MinimumFontSize = 22
            };
            var byteArray = report.BuildFile(this.ControllerContext);

            return(byteArray.Result);
        }