//private async Task<string> RenderPartialViewToString(string viewName, object model)
        //{
        //    if (string.IsNullOrEmpty(viewName))
        //        viewName = ControllerContext.ActionDescriptor.ActionName;
        //    ViewData.Model = model;
        //    using (var writer = new StringWriter())
        //    {
        //        ViewEngineResult viewResult =
        //            _viewEngine.FindView(ControllerContext, viewName, false);

        //        ViewContext viewContext = new ViewContext(
        //            ControllerContext,
        //            viewResult.View,
        //            ViewData,
        //            TempData,
        //            writer,
        //            new HtmlHelperOptions()
        //        );
        //        await viewResult.View.RenderAsync(viewContext);
        //        return writer.GetStringBuilder().ToString();
        //    }
        //}
        public PdfPTable TableForConvertion(ConvertConversionToDocViewModel docmodel)
        {
            Font      normal = GetFont();
            PdfPTable table  = new PdfPTable(3);
            PdfPCell  cell   = new PdfPCell(new Phrase("Конвертация валют", normal));

            cell.Colspan             = 3;
            cell.HorizontalAlignment = Element.ALIGN_CENTER;
            table.AddCell(cell);
            table.AddCell(new Phrase("Счет, с которого конвертируется сумма", normal));
            table.AddCell(new Phrase(docmodel.AccountFromNumber, normal));
            table.AddCell(new Phrase(docmodel.CurrencyFromName, normal));
            table.AddCell(new Phrase("Сумма", normal));
            cell         = new PdfPCell(new Phrase(docmodel.AmountSend, normal));
            cell.Colspan = 2;
            table.AddCell(cell);
            table.AddCell(new Phrase("Счет, на который конвертируется сумма", normal));
            table.AddCell(new Phrase(docmodel.AccountToNumber));
            table.AddCell(new Phrase(docmodel.CurrencyToName));
            table.AddCell(new Phrase("Сконвертированная Сумма", normal));
            cell         = new PdfPCell(new Phrase(docmodel.AmountReceive));
            cell.Colspan = 2;
            table.AddCell(cell);
            cell                     = new PdfPCell(new Phrase("Курсы, по которым проходит конвертация, определяются в момент совершения операции", normal));
            cell.Colspan             = 3;
            cell.HorizontalAlignment = Element.ALIGN_CENTER;
            table.AddCell(cell);
            table.AddCell(new Phrase("Курс 1 валюты относительно нац. валюты ", normal));
            table.AddCell(new Phrase(docmodel.CurrencyFromName));
            table.AddCell(new Phrase(docmodel.CurrencyFromRate));
            table.AddCell(new Phrase("Курс 2 валюты относительно нац. валюты ", normal));
            table.AddCell(new Phrase(docmodel.CurrencyToName));
            table.AddCell(new Phrase(docmodel.CurrencyToRate));
            cell         = new PdfPCell(new PdfPCell(new Phrase("Дата", normal)));
            cell.Colspan = 2;
            table.AddCell(cell);
            table.AddCell(new Phrase(docmodel.Date));
            return(table);
        }
        public async Task <IActionResult> ConvertUserCurrency(CurrencyConversionViewModel model)
        {
            User    user       = userService.FindUserByName(User.Identity.Name);
            Account sender     = accountService.FindAccountById(model.AccountSenderId).Result;
            decimal amountSend = 0;

            accountService.AmountTryParse(model.AmountSend, out amountSend);
            await validationService.ValidateConvertUserCurrency(model, sender, ModelState, user);

            if (ModelState.IsValid)
            {
                Account receiver      = accountService.FindAccountById(model.AccountReceiverId).Result;
                decimal amountReceive = 0;
                accountService.AmountTryParse(model.AmountReceive, out amountReceive);

                List <ExchangeRate> exchangeRateList   = exchangeRateService.GetLastExchangeRatesByDate().ToList();
                ExchangeRate        exchangeRate       = exchangeRateList.FirstOrDefault(r => r.CurrencyId == receiver.CurrencyId);
                ExchangeRate        exchangeRateSecond =
                    exchangeRateList.FirstOrDefault(r => r.CurrencyId == sender.CurrencyId);
                if (exchangeRate == null)
                {
                    exchangeRate = exchangeRateList.FirstOrDefault(u => u.CurrencyId == sender.CurrencyId);
                }
                if (exchangeRateSecond == null)
                {
                    exchangeRateSecond = exchangeRateList.FirstOrDefault(u => u.CurrencyId == receiver.CurrencyId);
                }
                int exchangeRateId       = exchangeRate.Id;
                int exchangeRateIdSecond = exchangeRateSecond.Id;

                InnerTransfer transfer = await
                                         transferService.CreateInnerTransfer(sender, receiver, amountSend, "конвертация", amountReceive,
                                                                             exchangeRateId, exchangeRateIdSecond);

                transferService.AddTransfer(transfer);
                ViewBag.successMessage = localizer["ConversionWasSuccessful"];
                ConvertConversionToDocViewModel docModel = new ConvertConversionToDocViewModel()
                {
                    Date = DateTime.Now.ToString(),
                    AccountFromNumber = sender.Number,
                    CurrencyFromName  = sender.Currency.Name,
                    AmountSend        = amountSend.ToString(),
                    AccountToNumber   = receiver.Number,
                    CurrencyToName    = receiver.Currency.Name,
                    AmountReceive     = amountReceive.ToString(),
                    CurrencyFromRate  = exchangeRate.RateForSale.ToString(),
                    CurrencyToRate    = exchangeRateSecond.RateForPurchaise.ToString()
                };
                _docmodel = docModel;

                PdfPTable table = createPdFandLoad.TableForConvertion(docModel);

                string name = createPdFandLoad.CreatePDF(table);
                ViewBag.FileName = name;
            }
            string       userName     = String.Empty;
            int          userId       = 0;
            UserInfo     userInfo     = userService.FindUserByIdInUserInfo(user.Id, ref userName, ref userId);
            EmployeeInfo employeeInfo = userService.FindUserByIdInCompany(user.Id, ref userName, ref userId);

            if (userInfo != null)
            {
                model.UserAccounts = selectListService.GetUserAccounts(userInfo.Id);
            }
            if (employeeInfo != null)
            {
                model.UserAccounts = selectListService.GetEmployeeAccounts(employeeInfo.Id);
            }
            return(View(model));
        }