public async Task <IActionResult> Edit(int id, [Bind("ID,CreatedDateTime,Bank,Branch,Account,FromDate,ToDate,AvailableBalance,AvailableBalanceDate,LedgerBalance,LedgerBalanceDate")] StatementDetails statementDetails)
        {
            if (id != statementDetails.ID)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(statementDetails);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!StatementDetailsExists(statementDetails.ID))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction("Index"));
            }
            return(View(statementDetails));
        }
        public async Task <IActionResult> Create([Bind("ID,CreatedDateTime,Bank,Branch,Account,FromDate,ToDate,AvailableBalance,AvailableBalanceDate,LedgerBalance,LedgerBalanceDate")] StatementDetails statementDetails)
        {
            if (ModelState.IsValid)
            {
                _context.Add(statementDetails);
                await _context.SaveChangesAsync();

                return(RedirectToAction("Index"));
            }
            return(View(statementDetails));
        }
        //
        // GET: /Finance/Welcome/
        public IActionResult Welcome(string name, int numTimes = 1)
        {
            var statement              = new Statement();
            var statementDetails       = new StatementDetails();
            var transactionDetailsList = new List <Transaction>();

            var uploads          = Path.Combine(_environment.WebRootPath, "uploads");
            var fileUploadedPath = Path.Combine(uploads, "Export20170424235704.csv");

            using (var streamReader = System.IO.File.OpenText(fileUploadedPath))
            {
                while (!streamReader.EndOfStream)
                {
                    var line = streamReader.ReadLine();

                    if (line.Contains("Created date"))
                    {
                        statementDetails.CreatedDateTime = ExtractDateTime(line);
                    }
                    else if (line.Contains("Bank") && line.Contains("Branch"))
                    {
                        var bankBranchDetails = line.Split(';');
                        statementDetails.Bank    = int.Parse(Regex.Replace(bankBranchDetails[0], @"\D", ""));
                        statementDetails.Branch  = int.Parse(Regex.Replace(bankBranchDetails[1], @"\D", ""));
                        statementDetails.Account = Regex.Replace(bankBranchDetails[2], "Account", "");
                    }
                    else if (line.Contains("From date"))
                    {
                        var date = Regex.Replace(line, @"\D", "");
                        statementDetails.FromDate = DateTime.ParseExact(date, "yyyyMMdd", CultureInfo.InvariantCulture);
                    }
                    else if (line.Contains("To date"))
                    {
                        var date = Regex.Replace(line, @"\D", "");
                        statementDetails.ToDate = DateTime.ParseExact(date, "yyyyMMdd", CultureInfo.InvariantCulture);
                    }
                    else if (line.Contains("Avail Bal"))
                    {
                        var balance = CalculateAvailAndLedgBal(line);
                        statementDetails.AvailableBalance = Convert.ToDecimal(balance.FirstOrDefault().Replace(".", ","));
                        var date = balance.LastOrDefault();
                        statementDetails.AvailableBalanceDate = DateTime.ParseExact(date, "yyyyMMdd", CultureInfo.InvariantCulture);
                    }
                    else if (line.Contains("Ledger Balance"))
                    {
                        var balance = CalculateAvailAndLedgBal(line);
                        statementDetails.LedgerBalance = Convert.ToDecimal(balance.FirstOrDefault().Replace(".", ","));
                        var date = balance.LastOrDefault();
                        statementDetails.LedgerBalanceDate = DateTime.ParseExact(date, "yyyyMMdd", CultureInfo.InvariantCulture);
                    }
                    else
                    {
                        var data = line.Split(new[] { ',' });
                        if (DateTime.TryParse(data[0], out DateTime result))
                        {
                            transactionDetailsList.Add(new Transaction()
                            {
                                Date            = result,
                                UniqueId        = int.Parse(data[1]),
                                TransactionType = data[2],
                                ChequeNumber    = data[3],
                                Payee           = data[4],
                                Memo            = data[5],
                                Amount          = Convert.ToDecimal(data[6].Replace(".", ","))
                            });
                        }
                    }
                }
                statement.StatementDetails = statementDetails;
                statement.Transactions     = transactionDetailsList;
            }
            DirectoryInfo di = new DirectoryInfo(uploads);

            foreach (FileInfo file in di.GetFiles())
            {
                file.Delete();
            }

            return(View(statement));
        }
 private void AddAdditionalDetailstoFinancials(string companyId, StatementDetails bs, CompanyFinancials cfToAdd, StatementType st)
 {
     cfToAdd.Statement = st;
     cfToAdd.FYear     = bs.Fyear;
     cfToAdd.SimId     = companyId;
 }
        private async Task <CompanyFinancials> ObtainReportedNumbers(string companyId, string apiKey, string statementType, StatementDetails sd)
        {
            CompanyFinancials cfToAdd;

            try
            {
                using (var wc = new WebClient())
                {
                    var urlToUse = UrlTemplate.Replace(@"{API-KEY}", apiKey)
                                   .Replace(@"{companyId}", companyId)
                                   .Replace(@"{statementType}", statementType)
                                   .Replace(@"{periodType}", sd.Period)
                                   .Replace(@"{financialYear}", sd.Fyear.ToString());
                    string data = "";
                    _logger.LogTrace($"Starting to fetch {sd} for {companyId}");
                    data = await wc.DownloadStringTaskAsync(urlToUse);

                    cfToAdd = await Task.Run(() => JsonConvert.DeserializeObject <CompanyFinancials>(data));

                    _logger.LogTrace($"Completed data download for {sd} => {companyId}; Number of records {cfToAdd.Values.Count}");
                    //cfToAdd = JsonConvert.DeserializeObject<CompanyFinancials>(data);
                }
                return(cfToAdd);
            }
            catch (Exception ex)
            {
                _logger.LogCritical($"Exception in DownloadReportableItems::ObtainReportedNumbers\n{ex.Message}");
                if (ex.InnerException != null)
                {
                    _logger.LogCritical(ex.InnerException.Message);
                }
                return(null);
            }
        }