コード例 #1
0
        public async Task <IActionResult> Create(BankStatementViewModel BankStatementViewModel)
        {
            if (!ModelState.IsValid)
            {
                return(View(BankStatementViewModel));
            }

            if (!await Import(BankStatementViewModel.FileUpload))
            {
                ViewData["Erro"] = "A file with the same name already exists!";
                return(View("create"));
            }

            var filename = BankStatementViewModel.FileUpload.FileName;

            var builder = _ioservice.ReadFile(filename);

            // transform
            var bank = new BankStatement();
            var ofx  = bank.Create(builder, bank.Id);

            await _bankStatementService.Save(ofx);

            ViewData["Message"] = "Send to Database";


            return(View("create"));
        }
コード例 #2
0
        private void btnDebit_Click(object sender, EventArgs e)
        {
            if (txtDesc.Text == string.Empty || txtValue.Text == string.Empty || txtData.Text == string.Empty)
            {
                DialogResult resultado3 = MessageBox.Show("Preencha todos os campos ! ", "Erro !", MessageBoxButtons.OK, MessageBoxIcon.Error);

                if (resultado3 == DialogResult.OK)
                {
                    Limpar(this);
                }
            }
            else
            {
                //Transformando o valor positivo em negativo
                txtSetValue.Text = lblNegative.Text + txtValue.Text;

                //Atribuindo as informações para a o banco
                BankStatement b = new BankStatement(Convert.ToDecimal(txtSetValue.Text), Convert.ToDateTime(txtData.Text), txtDesc.Text, txtNumAccount.Text);

                //Atribuindo o objeto ao BankStatement
                bkDao.DepositBankStatement(b);
                MessageBox.Show("Cadastrado !");
                Limpar(this);
                lblNegative.Text = "-";
            }
        }
コード例 #3
0
 private BankStatement ParseDatesAndBalances(BankStatement result, string item)
 {
     if (!foundBeginBalance && !foundBeginDate && beginningBalanceRegex.IsMatch(item))
     {
         var matches = beginningBalanceRegex.Matches(item);
         if (matches.Count == 1 && matches[0].Groups.Count == 5)
         {
             result.StartDate       = DateTime.Parse($"{matches[0].Groups[1].Value} {matches[0].Groups[2].Value}, {matches[0].Groups[3].Value}");
             result.StartingBalance = decimal.Parse(matches[0].Groups[4].Value);
             foundBeginBalance      = true;
             foundBeginDate         = true;
         }
     }
     if (!foundEndingBalance && !foundEndingDate && endingBalanceRegex.IsMatch(item))
     {
         var matches = endingBalanceRegex.Matches(item);
         if (matches.Count == 1 && matches[0].Groups.Count == 5)
         {
             result.EndDate       = DateTime.Parse($"{matches[0].Groups[1].Value} {matches[0].Groups[2].Value}, {matches[0].Groups[3].Value}");
             result.EndingBalance = decimal.Parse(matches[0].Groups[4].Value);
         }
         foundEndingBalance = true;
         foundEndingDate    = true;
     }
     return(result);
 }
コード例 #4
0
        public async Task <IActionResult> FileUploadAsync()
        {
            try
            {
                IFormFileCollection files = HttpContext.Request.Form.Files;

                if (files.Count() == 0)
                {
                    throw new Exception("Please attach the files.");
                }

                BankStatement importFile = await UploadArquivo(files);

                if (importFile == null)
                {
                    throw new Exception("Error importing file.");
                }

                var bankStatement = _mapper.Map <BankStatementViewModel>(importFile);

                return(View("BankStatements", bankStatement));
            }
            catch (Exception ex)
            {
                ViewData["MessageError"] = ex.Message;
            }

            return(View("Index"));
        }
コード例 #5
0
        public void ImportOperations_ClearingOperationsForUnclearedOperations_OperationsAddedToNewStatementAndRemovedFromOldAndStatusClearedAdded()
        {
            //Given
            var currentOperations = Enumerable.Range(1, 5)
                .Select(par => GetOperation(false, par.ToString(), par, par));

            var currentStatement = new BankStatement();
            currentStatement.Operations.AddRange(currentOperations);
            _statementsRepository.Setup(par =>par.GetAll())
                .Returns(Enumerable.Repeat(currentStatement,1));

            var newOperations = Enumerable.Range(1, 3)
                .Select(par => GetOperation(true, par.ToString(), par));
            _operationsRepository.Setup(a => a.GetAll())
                .Returns(currentOperations);

            //When
            _importer.ImportOperations(_fileName, newOperations);

            //Then
            _statementsRepository.Verify(par => par.Add(It.IsAny<BankStatement>()), Times.Once);
            Assert.AreEqual(_fileName, _insertedStatement.FileName);
            Assert.AreEqual(3, _insertedStatement.Updated);
            Assert.AreEqual(3, currentStatement.Replaced);
            Assert.AreEqual(2, currentStatement.Operations.Count);
        }
コード例 #6
0
        public IEnumerable<BankOperation> ImportOperations(string fileName, IEnumerable<BankOperation> opsToLoad)
        {
            BankStatement statement = new BankStatement()
            {
                FileName = fileName,
                LoadTime = DateTime.UtcNow,
            };

            var allOps = _operationRepository.GetAll();
            foreach (var item in opsToLoad)
            {
                var status = GetStatus(item, allOps);
                switch (status.Status)
                {
                    case CheckStatus.New:
                        AddNew(statement, item);
                        break;
                    case CheckStatus.Existing:
                        statement.Skipped++;
                        break;
                    case CheckStatus.ExistingUncleared:
                        UpdateExisting(statement, status);
                        break;
                }
            }

            _statementsRepository.Add(statement);

            return statement.Operations;
        }
コード例 #7
0
        public async Task <bool> Pay(Guid idAccount, double amount)
        {
            var account = _accountService.GetAccountById(idAccount).Result;
            var bank    = _bankService.GetBankById(account.IdBank);

            if (account.Invalid && bank.Invalid)
            {
                return(false);
            }

            Pay pay = new Pay(amount, DateTime.Now, account, bank);

            if (PayMade(pay) is false)
            {
                return(false);
            }

            var updatedAccount = await _accountService.UpdateAccount(account);

            if (UpdateMade(updatedAccount) is false)
            {
                return(false);
            }

            var bankStatement         = new BankStatement(Enum.GetName(typeof(TransactionType), TransactionType.Pay), DateTime.Now, amount, account.Balance, account.Id, account.IdOwner);
            var insertedBankStatement = await _bankStatementService.RegisterBankStatement(bankStatement);

            return(updatedAccount && insertedBankStatement);
        }
コード例 #8
0
        public override IList <BankStatement> ParseFile(string pPath, string pAcctCode)
        {
            string[] lArrStrLines = System.IO.File.ReadAllLines(pPath);
            DateTime dateValue;
            IList <BankStatement> lLstObjResult = new List <BankStatement>();

            for (int i = 0; i < lArrStrLines.Length; i++)
            {
                string[] lArrStrColumns = lArrStrLines[i].Split('|');
                if (DateTime.TryParse(lArrStrColumns[1], out dateValue))   //valide
                {
                    BankStatement lObjExtractBanking = new BankStatement();

                    lObjExtractBanking.AccountCode  = pAcctCode;
                    lObjExtractBanking.Date         = Convert.ToDateTime(lArrStrColumns[1]);
                    lObjExtractBanking.Reference    = lArrStrColumns[3];
                    lObjExtractBanking.Detail       = lArrStrColumns[4];
                    lObjExtractBanking.DebitAmount  = Convert.ToDouble(Regex.Replace(lArrStrColumns[7], @"[$\,]", ""));
                    lObjExtractBanking.CreditAmount = Convert.ToDouble(Regex.Replace(lArrStrColumns[8], @"[$\,]", ""));

                    lLstObjResult.Add(lObjExtractBanking);
                }
            }
            return(lLstObjResult);
        }
コード例 #9
0
 public BankStGLTransPage(UnicontaBaseEntity sourceData)
     : base(sourceData)
 {
     Init();
     master = sourceData as BankStatement;
     UpdateMaster();
 }
コード例 #10
0
        public void ImportOperations_ExistingOperationDescriptionMultilineAndLineFeedIsDifferent_OperationProperlyDiscoveredAsExisting()
        {
            List<BankOperation> currentOperations = new List<BankOperation>()
            {
                GetOperation(true, "Op1", description: "Op1\raaa"),
                GetOperation(true, "Op2", description: "Op2\r\naaa"),
                GetOperation(true, "Op3", description: "Op3aaa")
            };

            var currentStatement = new BankStatement();
            currentStatement.Operations.AddRange(currentOperations);
            _operationsRepository.Setup(a => a.GetAll())
                .Returns(currentOperations);

            List<BankOperation> newOperations = new List<BankOperation>()
            {
                GetOperation(true, "Op1", description: "Op1\r\naaa"),
                GetOperation(true, "Op2", description: "Op2\raaa"),
                GetOperation(true, "Op3", description: "Op3 aaa")
            };

            //When
            var importOperations = _importer.ImportOperations(_fileName, newOperations);

            //Then
            Assert.AreEqual(0, importOperations.Count());
            Assert.AreEqual(0, _insertedStatement.New);
            Assert.AreEqual(3, _insertedStatement.Skipped);
        }
コード例 #11
0
        public void Contribute(BankStatement statement)
        {
            var formattedBalance = _value.ToString("#.00", CultureInfo.InvariantCulture);
            var partialStatement = string.Format(" {0}", formattedBalance.PadRight(9));

            statement.Add(partialStatement);
        }
コード例 #12
0
        public override IList <BankStatement> ParseFile(string pPath, string pAcctCode)
        {
            string[] lArrStrLines = System.IO.File.ReadAllLines(pPath);
            IList <BankStatement> lLstObjResult = new List <BankStatement>();

            for (int i = 0; i < lArrStrLines.Length; i++)
            {
                BankStatement lObjExtractBanking = new BankStatement();

                string lStrFecha       = lArrStrLines[i].Substring(26, 10);
                string lStrReferencia  = lArrStrLines[i].Substring(36, 10);
                string lStrImporte     = lArrStrLines[i].Substring(46, 17);
                string lStrCargoAbono  = lArrStrLines[i].Substring(63, 5);
                string lStrSaldo       = lArrStrLines[i].Substring(68, 17);
                string lStrTransaccion = lArrStrLines[i].Substring(85, 50);

                lObjExtractBanking.AccountCode = pAcctCode;
                lObjExtractBanking.Date        = Convert.ToDateTime(lStrFecha);
                lObjExtractBanking.Reference   = lStrReferencia;
                lObjExtractBanking.Detail      = lStrTransaccion;
                if (lStrCargoAbono.ToUpper() == "CARGO")
                {
                    lObjExtractBanking.DebitAmount = Convert.ToDouble(lStrImporte);
                }
                else
                {
                    lObjExtractBanking.CreditAmount = Convert.ToDouble(lStrImporte);
                }
                lLstObjResult.Add(lObjExtractBanking);
            }
            return(lLstObjResult);
        }
コード例 #13
0
        private BankStatement BuildBankStatement(decimal balance, DateTime date)
        {
            var bankStatement = new BankStatement();

            bankStatement.SetProperty("Amount", MoneyAmount.Create(balance));
            bankStatement.SetProperty("ExecutionDate", date);

            return(bankStatement);
        }
コード例 #14
0
        private static int GetBankId(string value, BankStatement statement)
        {
            int bankId;

            if (!int.TryParse(value, out bankId))
            {
                bankId = 0;
            }

            return(bankId);
        }
コード例 #15
0
 static public string UnicontaCurrencyISO(Company company, BankStatement bankAccount)
 {
     if (bankAccount._Currency != 0)
     {
         return(CurrencyUtil.GetStringFromId((Currencies)bankAccount._Currency));
     }
     else
     {
         return(CurrencyUtil.GetStringFromId((Currencies)company._Currency));
     }
 }
コード例 #16
0
ファイル: BankTests.cs プロジェクト: tiagodeliberali/FinpeApi
        public void GetLatestStatement_ShouldReturnNullIfNothingAvailable()
        {
            // Arrange
            Bank bank = new Bank();

            // Act
            BankStatement nullStatement = bank.GetLatestStatement();

            // Assert
            Assert.Null(nullStatement);
        }
コード例 #17
0
 private BankStatement GetBankPhoneNumber(BankStatement result, string item)
 {
     if (customerServicePhone.IsMatch(item))
     {
         var matches = customerServicePhone.Matches(item);
         if (matches.Count == 1 && matches[0].Groups.Count == 2)
         {
             result.Bank.PhoneNumber = matches[0].Groups[1].Value;
         }
     }
     return(result);
 }
コード例 #18
0
ファイル: BanamexFormatter.cs プロジェクト: radtek/UGRS_Full
        public override IList <BankStatement> ParseFile(string pPath, string pAcctCode)
        {
            string[] lArrStrLines = System.IO.File.ReadAllLines(pPath);
            DateTime dateValue;
            int      lIntConsecutiveVal;
            IList <BankStatement> lLstObjResult = new List <BankStatement>();

            for (int i = 0; i < lArrStrLines.Length; i++)
            {
                string[] lArrStrColumns = lArrStrLines[i].Split('|');
                if ((DateTime.TryParse(lArrStrColumns[0], out dateValue)) && (lArrStrColumns.Count() < 5))  //valide
                {
                    BankStatement lObjExtractBanking = new BankStatement();

                    lObjExtractBanking.AccountCode = pAcctCode;
                    lObjExtractBanking.Date        = Convert.ToDateTime(lArrStrColumns[0]);
                    lObjExtractBanking.Reference   = lArrStrColumns[1].Substring(0, 16).Trim();
                    lObjExtractBanking.Detail      = lArrStrColumns[1].Substring(17, 53).Trim();

                    if (lArrStrColumns[2] != "")
                    {
                        lObjExtractBanking.DebitAmount = Convert.ToDouble(lArrStrColumns[2]);
                    }
                    if (lArrStrColumns[3] != "")
                    {
                        lObjExtractBanking.CreditAmount = Convert.ToDouble(lArrStrColumns[3]);
                    }

                    lLstObjResult.Add(lObjExtractBanking);
                }
                else if (int.TryParse(lArrStrColumns[0], out lIntConsecutiveVal) && (lArrStrColumns.Count() <= 10))
                {
                    BankStatement lObjExtractBanking = new BankStatement();

                    lObjExtractBanking.AccountCode = pAcctCode;
                    lObjExtractBanking.Date        = Convert.ToDateTime(lArrStrColumns[1]);
                    lObjExtractBanking.Reference   = lArrStrColumns[9].ToString();
                    lObjExtractBanking.Detail      = string.IsNullOrEmpty(lArrStrColumns[7].ToString()) ? string.Empty : lArrStrColumns[7].ToString();

                    if (lArrStrColumns[2] == "C")
                    {
                        lObjExtractBanking.DebitAmount = Convert.ToDouble(lArrStrColumns[8]);
                    }
                    if (lArrStrColumns[2] == "A")
                    {
                        lObjExtractBanking.CreditAmount = Convert.ToDouble(lArrStrColumns[8]);
                    }

                    lLstObjResult.Add(lObjExtractBanking);
                }
            }
            return(lLstObjResult);
        }
コード例 #19
0
        public void BankStatemenListTransaction_ToPropertyMemo_MustNotBeEmpty()
        {
            //Arrange
            var service  = new IOService();
            var fileName = "extrato1.ofx";
            var builder  = service.ReadFile(fileName);

            //Action
            var bank          = new BankStatement();
            var BankStatement = bank.Create(builder, bank.Id);

            //Assert
            Assert.All(BankStatement.Transactions, Transactions => Assert.False(string.IsNullOrWhiteSpace(Transactions.Memo)));
            Assert.Equal(35, BankStatement.Transactions.Count);
        }
コード例 #20
0
        public BankStatement GenerateBankStatement(int id)
        {
            if (id == 0)
            {
                throw new IdentifierUndefinedException();
            }

            BankAccount bankAccount = GetById(id);

            bankAccount.Transactions = _repositoryTransaction.GetManyByBankAccountId(bankAccount.Id).ToList();
            BankStatement bankStatement = new BankStatement();

            bankStatement.GenerateBankStatement(bankAccount);
            return(bankStatement);
        }
コード例 #21
0
        public void GivenEmptyContext_WhenOperationsAddedAndSaved_ThenAllPublicFieldsAreStored()
        {
            //Given
            XmlContext saveContext = GetNewContext();
            //When
            var account = new BankAccount() { Number = "ACC1", Name = "Account1", Description = "DescAccount1" };
            var accountsRepository = saveContext.GetRepository<IRepository<BankAccount>>();
            accountsRepository.Add(account);

            var opType = new BankOperationType() { Name = "Type1" };
            var opTypeRepository = saveContext.GetRepository<IRepository<BankOperationType>>();
            opTypeRepository.Add(opType);

            var ops = new List<BankOperation>()
            {
                InitOperationWithTestData(1, account, opType, null),
                InitOperationWithTestData(2, account, opType, null),
                InitOperationWithTestData(3, account, opType, null)
            };

            var opRepository = saveContext.GetRepository<IRepository<BankOperation>>();
            foreach (var item in ops)
            {
                opRepository.Add(item);
            }

            var statement = new BankStatement()
            {
                FileName = "StatementFile",
                LoadTime = new DateTime(),
                Operations = ops
            };

            var statementRepository = saveContext.GetRepository<IRepository<BankStatement>>();
            statementRepository.Add(statement);

            Assert.IsTrue(saveContext.SaveChanges());

            //Then - verify if operations can be loaded and have the same test data
            _saveMock.Setup(a => a.Load()).Returns(_savedContext);
            XmlContext loadContext = GetNewContext();
            var savedOperationRepository = loadContext.GetRepository<IRepository<BankOperation>>();
            Assert.AreEqual(3, savedOperationRepository.GetAll().Count());
            foreach (var item in savedOperationRepository.GetAll())
            {
                CheckOperation(item, account, opType);
            }
        }
コード例 #22
0
 public override void SetParameter(IEnumerable <ValuePair> Parameters)
 {
     foreach (var rec in Parameters)
     {
         if (string.Compare(rec.Name, "Bank", StringComparison.CurrentCultureIgnoreCase) == 0)
         {
             var cache = api.GetCache(typeof(Uniconta.DataModel.BankStatement)) ?? api.LoadCache(typeof(Uniconta.DataModel.BankStatement)).GetAwaiter().GetResult();
             master = (Uniconta.DataModel.BankStatement)cache.Get(rec.Value);
             if (master != null)
             {
                 UpdateMaster();
             }
         }
     }
     base.SetParameter(Parameters);
 }
コード例 #23
0
        /// <summary>
        /// DOMESTIC Payment:
        /// Transfers within the same country.
        ///
        /// SEPA Payment:
        /// The conditions for a SEPA payment
        /// 1.Creditor payment has currency code 'EUR'
        /// 2.Sender - Bank og Receiver-Bank has to be member of the  European Economic Area.
        /// 3.Creditor account has to be IBAN
        /// 4.Payment must be Non-urgent
        ///
        /// CROSS BORDER Payment:
        ///
        /// </summary>
        public ISO20022PaymentTypes ISOPaymentType(string paymentCcy, BankStatement _bankStatement, string creditorIBAN, Company company)
        {
            var companyIBAN  = _bankStatement._IBAN ?? string.Empty;
            var companySWIFT = _bankStatement._SWIFT ?? string.Empty;

            var companyBankCountryId = string.Empty;

            if (companyIBAN != string.Empty)
            {
                companyBankCountryId = companyIBAN.Substring(0, 2);
            }
            else if (companySWIFT != string.Empty)
            {
                companyBankCountryId = companySWIFT.Substring(4, 2);
            }
            else
            {
                companyBankCountryId = company._CountryId.ToString();
            }

            creditorIBAN = creditorIBAN ?? string.Empty;

            if (creditorIBAN != string.Empty && companyBankCountryId != string.Empty)
            {
                var creditorBankCountryId = creditorIBAN.Substring(0, 2);

                //SEPA payment:
                if (paymentCcy == BaseDocument.CCYEUR)
                {
                    if (SEPACountry(companyBankCountryId) && SEPACountry(creditorBankCountryId))
                    {
                        return(ISO20022PaymentTypes.SEPA);
                    }
                }
                else if (companyBankCountryId == creditorBankCountryId)
                {
                    return(ISO20022PaymentTypes.DOMESTIC);
                }
                else
                {
                    return(ISO20022PaymentTypes.CROSSBORDER);
                }
            }

            return(ISO20022PaymentTypes.DOMESTIC);
        }
コード例 #24
0
        public void GivenEmptyContext_WhenSavedState_ThenXmlAsExpected()
        {
            //Given
            var context = GetNewContext();

            //When
            var account = new BankAccount() { Number = "A", Name = "B", Description = "C" };
            var accountsRepository = context.GetRepository<IRepository<BankAccount>>();
            accountsRepository.Add(account);

            var opType = new BankOperationType() { Name = "xx" };
            var opTypeRepository = context.GetRepository<IRepository<BankOperationType>>();
            opTypeRepository.Add(opType);

            var ops = new List<BankOperation>()
            {
                new BankOperation(){Id=1,Description="A",BankAccount=account, Type = opType},
                new BankOperation(){Id=2,Description="C",BankAccount =account, Type = opType}
            };

            var opRepository = context.GetRepository<IRepository<BankOperation>>();
            foreach (var item in ops)
            {
                opRepository.Add(item);
            }

            var statement = new BankStatement()
            {
                FileName = "A",
                LoadTime = new DateTime(),
                Operations = ops
            };
            var statementRepository = context.GetRepository<IRepository<BankStatement>>();
            statementRepository.Add(statement);

            Assert.IsTrue(context.SaveChanges());

            //Then
            _saveMock.Verify(a => a.Save(It.IsAny<XElement>()));
            Assert.IsNotNull(_savedContext.ToString());

            _saveMock.Setup(a => a.Load()).Returns(new XElement(_savedContext));

            var context2 = new XmlContext(_saveMock.Object, GetRepoFactory());
        }
コード例 #25
0
        public BankStLines(UnicontaBaseEntity sourceData)
            : base(sourceData)
        {
            InitializeComponent();
            this.DataContext = this;

            master = sourceData as BankStatement;
            if (fromDate == DateTime.MinValue)
            {
                DateTime date            = GetSystemDefaultDate();
                var      firstDayOfMonth = new DateTime(date.Year, date.Month, 1);
                var      lastDayOfMonth  = firstDayOfMonth.AddMonths(1).AddDays(-1);
                fromDate = firstDayOfMonth;
                toDate   = lastDayOfMonth;
            }

            bool RoundTo100;
            var  Comp = api.CompanyEntity;

            if (Comp.SameCurrency(master._Currency))
            {
                RoundTo100 = Comp.RoundTo100;
            }
            else
            {
                RoundTo100 = !CurrencyUtil.HasDecimals(master._Currency);
            }
            if (RoundTo100)
            {
                Debit.HasDecimals = Credit.HasDecimals = Amount.HasDecimals = Total.HasDecimals = false;
            }

            if (!Comp._UseVatOperation)
            {
                VatOperation.Visible = false;
            }

            dgBankStatementLine.api = api;
            bankTransApi            = new BankStatementAPI(api);
            SetRibbonControl(localMenu, dgBankStatementLine);
            dgBankStatementLine.UpdateMaster(master);
            dgBankStatementLine.BusyIndicator = busyIndicator;
            localMenu.OnItemClicked          += localMenu_OnItemClicked;
        }
コード例 #26
0
        public IList <BankStatement> ParseLines(System.Data.DataTable pDtbStrLines, string pAcctCode)
        {
            DateTime dateValue;
            IList <BankStatement> lLstObjResult = new List <BankStatement>();

            for (int i = 0; i < pDtbStrLines.Rows.Count; i++)
            {
                if (DateTime.TryParse(pDtbStrLines.Rows[i].ItemArray[0].ToString(), out dateValue))   //valide
                {
                    BankStatement lObjExtractBanking = new BankStatement();

                    string lStrFecha      = pDtbStrLines.Rows[i].ItemArray[0].ToString();
                    string lStrConcepto   = pDtbStrLines.Rows[i].ItemArray[1].ToString();
                    string lStrReferencia = pDtbStrLines.Rows[i].ItemArray[2].ToString();
                    string lStrCargo      = pDtbStrLines.Rows[i].ItemArray[4].ToString();
                    string lStrAbono      = pDtbStrLines.Rows[i].ItemArray[5].ToString();

                    lObjExtractBanking.AccountCode = pAcctCode;
                    lObjExtractBanking.Date        = Convert.ToDateTime(lStrFecha);
                    lObjExtractBanking.Reference   = lStrReferencia;
                    lObjExtractBanking.Detail      = lStrConcepto;
                    if (lStrCargo != "")
                    {
                        lObjExtractBanking.DebitAmount = Convert.ToDouble(Regex.Replace(lStrCargo, @"[$\,]", ""));
                    }
                    if (lStrCargo == "")
                    {
                        lObjExtractBanking.DebitAmount = 0;
                    }
                    if (lStrAbono != "")
                    {
                        lObjExtractBanking.CreditAmount = Convert.ToDouble(Regex.Replace(lStrAbono, @"[$\,]", ""));
                    }
                    if (lStrAbono == "")
                    {
                        lObjExtractBanking.CreditAmount = 0;
                    }

                    lLstObjResult.Add(lObjExtractBanking);
                }
            }
            return(lLstObjResult);
        }
コード例 #27
0
ファイル: BankTests.cs プロジェクト: tiagodeliberali/FinpeApi
        public void CreateBankStatement()
        {
            // Arrange
            int         bankId = 10;
            MoneyAmount amount = MoneyAmount.Create(12.50m);
            DateTime    date   = DateTime.Parse("2018-04-28 18:35:27");

            Bank bank = new Bank();

            bank.SetId(bankId);

            // Act
            BankStatement statement = bank.NewBankStatement(amount, date);

            // Assert
            Assert.Equal(bankId, statement.Bank.Id);
            Assert.Equal(date, statement.ExecutionDate);
            Assert.Equal(amount, statement.Amount);
        }
コード例 #28
0
        private static DateTime ConvertOfxDateToDateTime(string ofxDate, BankStatement statement)
        {
            DateTime dateTimeReturned = DateTime.MinValue;

            try
            {
                int year   = GetPartOfOfxDate(ofxDate, Enumerators.PartDateTime.YEAR);
                int month  = GetPartOfOfxDate(ofxDate, Enumerators.PartDateTime.MONTH);
                int day    = GetPartOfOfxDate(ofxDate, Enumerators.PartDateTime.DAY);
                int hour   = GetPartOfOfxDate(ofxDate, Enumerators.PartDateTime.HOUR);
                int minute = GetPartOfOfxDate(ofxDate, Enumerators.PartDateTime.MINUTE);
                int second = GetPartOfOfxDate(ofxDate, Enumerators.PartDateTime.SECOND);

                dateTimeReturned = new DateTime(year, month, day, hour, minute, second);
            }
            catch (Exception)
            { }

            return(dateTimeReturned);
        }
コード例 #29
0
        /// <summary>
        /// Converts a Bank Extract line to a Bank Page.
        /// </summary>
        /// <param name="pObjExtractBanking"></param>
        /// <returns></returns>
        private SAPbobsCOM.BankPages PopulateBankPages(BankStatement pObjExtractBanking)
        {
            mObjBankPage = (SAPbobsCOM.BankPages)mObjCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oBankPages);

            mObjBankPage.AccountCode = pObjExtractBanking.AccountCode;
            mObjBankPage.DueDate     = pObjExtractBanking.Date;
            mObjBankPage.Reference   = pObjExtractBanking.Reference;
            mObjBankPage.Memo        = pObjExtractBanking.Detail;

            if (pObjExtractBanking.DebitAmount > 0)
            {
                mObjBankPage.DebitAmount = pObjExtractBanking.DebitAmount;
            }

            if (pObjExtractBanking.CreditAmount > 0)
            {
                mObjBankPage.CreditAmount = pObjExtractBanking.CreditAmount;
            }

            return(mObjBankPage);
        }
コード例 #30
0
        public List <BankStatement> readBankall(DateTime fromDate, DateTime toDate, int?LocId)
        {
            List <BankStatement> lst = new List <BankStatement>();

            DbCommand dbcommand = myDataBase.GetStoredProcCommand(DBConstant.READ_ALLBANKSTATEMENT_SEARCH);

            if (LocId != 0)
            {
                myDataBase.AddInParameter(dbcommand, "@LocationId", DbType.Int32, LocId);
            }
            else
            {
                myDataBase.AddInParameter(dbcommand, "@LocationId", DbType.Int32, DBNull.Value);
            }
            myDataBase.AddInParameter(dbcommand, "@in_from_date", DbType.DateTime, fromDate);
            myDataBase.AddInParameter(dbcommand, "@in_to_date", DbType.DateTime, toDate);

            using (IDataReader reader1 = myDataBase.ExecuteReader(dbcommand))
            {
                while (reader1.Read())
                {
                    BankStatement bankstatement = new BankStatement();
                    bankstatement.DATE         = GetStringFromDataReader(reader1, "DATE");
                    bankstatement.VouchNo      = GetStringFromDataReader(reader1, "voch.No");
                    bankstatement.Account_Code = GetIntegerFromDataReader(reader1, "A/C Code");
                    bankstatement.Account_Head = GetStringFromDataReader(reader1, "Account_Head");
                    bankstatement.Particulars  = GetStringFromDataReader(reader1, "Particulars");
                    bankstatement.Chq_No       = GetStringFromDataReader(reader1, "Chq-No.");
                    bankstatement.DEBITAMOUNT  = GetIntegerFromDataReader(reader1, "DEBIT AMOUNT");
                    bankstatement.BankName     = GetStringFromDataReader(reader1, "Bank Name");
                    bankstatement.CREDITAMOUNT = GetStringFromDataReader(reader1, "Credit Amount");

                    TotalDebitAmount            = Convert.ToInt32(TotalDebitAmount) + Convert.ToInt32(bankstatement.DEBITAMOUNT);
                    bankstatement.TotalDebitAmt = TotalDebitAmount;

                    lst.Add(bankstatement);
                }
            }
            return(lst);
        }
コード例 #31
0
ファイル: BancomerFormatter.cs プロジェクト: radtek/UGRS_Full
        public override IList <BankStatement> ParseFile(string pPath, string pAcctCode)
        {
            IList <BankStatement> lLstObjResult = new List <BankStatement>();
            string      lStrContent             = System.IO.File.ReadAllText(pPath);
            XmlDocument lObjXmlDoc = new XmlDocument();

            lObjXmlDoc.LoadXml(lStrContent);
            XmlNodeList lObjNodeRows = lObjXmlDoc.GetElementsByTagName("Row");
            int         i            = 0;

            foreach (XmlNode lObjNodeRow in lObjNodeRows)
            {
                if (i >= 2)
                {
                    if (lObjNodeRow.ChildNodes.Count < 7)
                    {
                        continue;
                    }
                    BankStatement lObjExtractBanking = new BankStatement();
                    lObjExtractBanking.AccountCode = pAcctCode;
                    lObjExtractBanking.Date        = DateTime.ParseExact(lObjNodeRow.ChildNodes.Item(0).InnerText, "yyyy-MM-dd", CultureInfo.InvariantCulture);
                    lObjExtractBanking.Reference   = lObjNodeRow.ChildNodes.Item(2).InnerText;
                    lObjExtractBanking.Detail      = lObjNodeRow.ChildNodes.Item(3).InnerText;
                    Double lDblTemp = 0;
                    if (Double.TryParse(lObjNodeRow.ChildNodes.Item(4).InnerText, out lDblTemp))
                    {
                        lObjExtractBanking.DebitAmount = lDblTemp;
                    }
                    if (Double.TryParse(lObjNodeRow.ChildNodes.Item(5).InnerText, out lDblTemp))
                    {
                        lObjExtractBanking.CreditAmount = lDblTemp;
                    }
                    lLstObjResult.Add(lObjExtractBanking);
                }
                i++;
            }
            return(lLstObjResult);
        }
コード例 #32
0
        public override IList <BankStatement> ParseFile(string pPath, string pAcctCode)
        {
            string[] lArrStrLines = System.IO.File.ReadAllLines(pPath);
            int      dateValue;
            IList <BankStatement> lLstObjResult = new List <BankStatement>();

            for (int i = 0; i < lArrStrLines.Length; i++)
            {
                string[] lArrStrColumns = lArrStrLines[i].Split(',');
                if (int.TryParse(Regex.Replace(lArrStrColumns[1].ToString(), @"[^\w]", ""), out dateValue))   //valide
                {
                    BankStatement lObjExtractBanking = new BankStatement();

                    string lStrConvertFecha = Regex.Replace(lArrStrColumns[1].ToString(), @"[^\w]", "");
                    string lStrCargoAbono   = lArrStrColumns[5].ToString();
                    string lStrImporte      = Regex.Replace(lArrStrColumns[6].ToString(), @"[^\w]", "");

                    lObjExtractBanking.AccountCode = pAcctCode;
                    lObjExtractBanking.Date        = DateTime.ParseExact(lStrConvertFecha, "ddMMyyyy", CultureInfo.InvariantCulture);
                    lObjExtractBanking.Reference   = Regex.Replace(lArrStrColumns[8].ToString(), @"[^\w]", "");
                    lObjExtractBanking.Detail      = Regex.Replace(lArrStrColumns[4].ToString(), @"[^\w]", " ").Trim();

                    lStrCargoAbono = lStrCargoAbono.ToArray().Contains('+') ? "ABONO" : "CARGO";

                    if (lStrCargoAbono.ToUpper() == "CARGO")
                    {
                        lObjExtractBanking.DebitAmount = Convert.ToDouble(lStrImporte);
                    }
                    else
                    {
                        lObjExtractBanking.CreditAmount = Convert.ToDouble(lStrImporte);
                    }

                    lLstObjResult.Add(lObjExtractBanking);
                }
            }
            return(lLstObjResult);
        }
コード例 #33
0
        public void Post([FromBody] BankStatement BankStatement)
        {
            //BankStatement BankStatement = new BankStatement()
            //{
            //    BankStatementBrand = BankStatementDto.BankStatementBrand,
            //    BankStatementholderName = BankStatementDto.BankStatementholderName,
            //    CVS = BankStatementDto.CVS,
            //    BankStatementType = BankStatementDto.BankStatementType,
            //    Id = BankStatementDto.BankStatementId,
            //    ExpirationDate = BankStatementDto.ExpirationDate,
            //    Number = BankStatementDto.Number,
            //    CreatedDate = BankStatementDto.CreatedDate
            //};

            try
            {
                //   _BankStatementBusiness.SaveAndUpdate(BankStatement);
                _BankStatementBusiness.Save();
            }
            catch (Exception ex)
            {
                //  throw new System.Web.Http.HttpResponseException(System.Net.HttpStatusCode.InternalServerError);
            }
        }
コード例 #34
0
        private async Task AddBankStatementData(BankStatement currentBankStatement)
        {
            try
            {
                Bank bankEntity = _bankRepository.GetByAgencyCode(currentBankStatement.BankAccount.Bank.Code);
                if (bankEntity == null)
                {
                    await _bankRepository.Add(currentBankStatement.BankAccount.Bank);
                }
                else
                {
                    currentBankStatement.BankAccount.Bank   = bankEntity;
                    currentBankStatement.BankAccount.BankId = bankEntity.Id;
                }

                BankAccount accountEntity = _bankAccountRepository.GetByAccountBankId(currentBankStatement.BankAccount.AccountCode, currentBankStatement.BankAccount.BankId);
                if (accountEntity == null)
                {
                    await _bankAccountRepository.Add(currentBankStatement.BankAccount);
                }
                else
                {
                    currentBankStatement.BankAccount    = accountEntity;
                    currentBankStatement.BankAccount.Id = accountEntity.Id;
                }

                currentBankStatement.Transactions = null;
                await _bankStatementRepository.Add(currentBankStatement);

                includeBankStatementData = true;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
コード例 #35
0
        private void Compare(BankStatement statement, string toCheck)
        {
            if (statement.ToString().Length < toCheck.Length)
            {
                throw new AssertionException(string.Format(
                                                 "the bank statement is shorter than what we expect.\n bank statement: {0} \n expected string: {1} ",
                                                 statement, toCheck));
            }

            char characterFromStatement;
            char characterToCheck;

            for (int i = 0; i < toCheck.Length; i++)
            {
                characterToCheck       = toCheck[i];
                characterFromStatement = statement.ToString()[i];
                if (characterToCheck != characterFromStatement)
                {
                    throw new AssertionException(string.Format(
                                                     "The character at {0} is different than expected.\n Bank statement: {1}\n expected string: {2}",
                                                     i, statement, toCheck));
                }
            }
        }
コード例 #36
0
 public void Contribute(BankStatement statement)
 {
     var formattedBalance = _value.ToString("#.00", CultureInfo.InvariantCulture);
     var partialStatement = string.Format(" {0}", formattedBalance.PadRight(9));
     statement.Add(partialStatement);
 }
コード例 #37
0
 public void PrintLine(BankStatement statement)
 {
     Statements.Add(statement);
 }
コード例 #38
0
        public Connector1C(string filename, Company company)
        {
            Helper.Log("Старт");
            OdbcConnection conn = new OdbcConnection();
            conn.ConnectionString = "Driver={Microsoft dBase Driver (*.dbf)};SourceType=DBF;SourceDB=" + filename + ";Exclusive=No; NULL=NO;DELETED=NO;BACKGROUNDFETCH=NO;";
            conn.Open();
            if (conn.State == System.Data.ConnectionState.Open)
            {
                OdbcCommand oCmd = conn.CreateCommand();
                oCmd.CommandText = "SELECT * FROM " + filename;
                DataTable ImportedTable = new DataTable();
                ImportedTable.Load(oCmd.ExecuteReader());
                ImportedRows.AddRange(ImportedTable.Select());

                DataRow[] statementRows = ImportedTable.Select("REKVTYPE = 'Документ.Выписка' AND REKVIZIT <> 'Субконто3'");

                for (int i = 0; i < statementRows.Length; i++)
                {
                    DataRow row = statementRows[i];

                    double StatementStartRowIndex = (double)row[0];
                    double StatementEndRowIndex = GetStatementEndIndex(StatementStartRowIndex);

                    BankStatement bs = new BankStatement();
                    bs.GUID = (double)row[0];
                    try
                    {
                        // ШАПКА
                        double BaseGUID = bs.GUID - 1;
                        bs.Наименование = row["REKVIZIT"].ToString();

                        Helper.Log(bs.Наименование);

                        DataRow rowID = ImportedRows[(int)(BaseGUID + 2)];
                        bs.НомерДок = rowID[5].ToString();
                        DataRow rowDate = ImportedRows[(int)(BaseGUID + 3)];
                        bs.ДатаДок = rowDate[5].ToString();

                        // ТАБЛИЧНАЯ ЧАСТЬ
                        List<Transfer> transfers = new List<Transfer>();
                        List<DataRow> TransferRows = new List<DataRow>();
                        string cond = "PARENTGUID = " + bs.GUID
                                        + " AND REKVIZIT = 'ВидДвижения'"
                                        + " AND REKVTYPE = 'Справочник.ДвиженияДенежныхСредств'";
                        TransferRows.AddRange(ImportedTable.Select(cond));

                        string Currency = GetStatementCurrency(StatementStartRowIndex, StatementEndRowIndex);

                        for (int j = 0; j < TransferRows.Count; j++)
                        {
                            DataRow transferBaseRow = TransferRows[j];

                            double TransferStartRowIndex = (double)transferBaseRow[0];
                            double TransferEndRowIndex = GetTransferEndIndex(TransferStartRowIndex);

                            int transferBaseGUID = (int)(double)transferBaseRow[0] - 1;
                            try
                            {
                                Transfer t = new Transfer();

                                t.КоррСчёт = ImportedRows[transferBaseGUID + 2][5].ToString();
                                t.НазначениеПлатежа = ImportedRows[transferBaseGUID + 1][5].ToString();
                                t.Субконто1 = GetSubconto(1, transferBaseGUID);
                                t.Субконто2 = GetSubconto(2, transferBaseGUID);
                                t.Субконто3 = GetSubconto(3, transferBaseGUID);
                                t.Приход = GetTransferAttributeDouble("Приход", transferBaseGUID);
                                t.Расход = GetTransferAttributeDouble("Расход", transferBaseGUID);
                                t.Валюта = Currency;
                                t.ВидДвижения = GetTransferAttributeName("ВидДвижения", transferBaseGUID);
                                t.Company = company;
                                if (bs.Наименование.Contains('т') && bs.Наименование.Contains('д'))
                                {
                                }
                                bool IsIncome = t.Приход > t.Расход;
                                if (t.Валюта == "BYR")
                                {
                                    t.Курс = 1;
                                }
                                else
                                {
                                    t.Курс = GetTransferRate(IsIncome, StatementStartRowIndex, StatementEndRowIndex, TransferStartRowIndex, TransferEndRowIndex);
                                }
                                bs.Transfers.Add(t);
                            }
                            catch (Exception e)
                            {
                                Helper.Log("ID=" + transferBaseGUID.ToString() + ": " + e.Message);
                            }
                        }
                        statements.Add(bs);
                        Helper.Log("Платежей в выписке: " + bs.Transfers.Count);
                    }
                    catch (Exception e)
                    {
                        Helper.Log(e.Message);
                    }
                }
                conn.Close();
                Helper.Log("Импорт из DBF завершен.");
            }
        }
コード例 #39
0
        private void Compare(BankStatement statement, string toCheck)
        {
            if (statement.ToString().Length < toCheck.Length)
            {
                throw new AssertionException(string.Format(
                    "the bank statement is shorter than what we expect.\n bank statement: {0} \n expected string: {1} ",
                    statement, toCheck));
            }

            char characterFromStatement;
            char characterToCheck;

            for (int i = 0; i < toCheck.Length; i++)
            {
                characterToCheck = toCheck[i];
                characterFromStatement = statement.ToString()[i];
                if (characterToCheck != characterFromStatement)
                {
                    throw new AssertionException(string.Format(
                        "The character at {0} is different than expected.\n Bank statement: {1}\n expected string: {2}",
                        i, statement, toCheck));
                }
            }
        }
コード例 #40
0
        tbl_Cashflow CreateCashflow(Entities db, Transfer t, BankStatement statement)
        {
            tbl_Cashflow c = new tbl_Cashflow();

            c.ModifiedByID = GetSupervisorID();
            c.ModifiedOn = DateTime.Now;
            c.CreatedByID = GetSupervisorID();
            c.CreatedOn = DateTime.Now;

            // 01 НОМЕР
            c.CFNumber = GetNextNumber(db);

            // 02 НАЗНАЧЕНИЕ
            c.Subject = t.ВидДвижения + ": " + t.НазначениеПлатежа;

            // 03 ОТ
            DateTime DocDate = GetDateTime(statement.ДатаДок);
            c.DocDate = DocDate;

            // 04 ТИП
            CashflowType cashflowType;
            if (t.Приход > 0)
                cashflowType = CashflowType.Income;
            else
                cashflowType = CashflowType.Expense;
            c.TypeID = GetCashflowTypeID(cashflowType);

            // 05 СТАТЬЯ NULL
            // 06 КАТЕГОРИЯ NULL
            // 07 ОТВЕТСТВЕННЫЙ
            c.OwnerID = GetOwnerID();

            // 08 СОСТОЯНИЕ
            c.StatusID = new Guid(Constants.CashflowStateFinishedID);

            // 09 ИНЦИДЕНТ NULL
            // 10 ВОЗДЕЙСТВИЕ NULL
            // 11 PL - (UseAsPandL - P&L) NULL

            // 12 КАССА
            c.CashAccountID = new Guid(Constants.CashflowKassaID);
            // 13 ПЛАНИРУЕМАЯ ДАТА
            c.EstimatedDate = GetDateTime(statement.ДатаДок);

            // 14 ФАКТИЧЕСКАЯ ДАТА
            c.ActualDate = GetDateTime(statement.ДатаДок);

            // 15 ТИП РАСХОДА-ДОХОДА NULL
            // 16 ПЕРИОД
            c.PeriodID = GetPeriodID(db, c.ActualDate.Value);

            // 00 Контрагент
            string comments = "";
            Guid? AccountID = GetAccountID(db, t);
            if (!AccountID.HasValue)
            {
                comments += "Контрагент не найден: " + GetAccountNameCode(t) + ".\r\n";
            }

            // 19 УЧИТЫВАТЬ ПРИ ВЗАИМОРАСЧЁТАХ NULL
            // 20 ДЕБИТОР-КРЕДИТОР NULL
            // 21 АВТОМАТИЧЕСКИ РАССЧИТЫВАТЬ СУММУ
            c.AutocalcAmount = 1;

            // 22 ВАЛЮТ
            c.CurrencyID = ConvertToCurrencyID(t.Валюта);

            // 23 СУММА
            if (cashflowType == CashflowType.Income)
                c.Amount = (decimal)t.Приход;
            else
                c.Amount = (decimal)t.Расход;

            // 24 ВНУТРЕННИЙ КУРС
            c.CurrencyRate = (decimal)t.Курс;

            // 25 СУММА В БАЗОВОЙ ВАЛЮТЕ NULL
            //c.BasicAmount = (int)(c.Amount / c.CurrencyRate);
            // 26 КОНТАКТ NULL
            // 27 СЧЁТ NULL
            // 28 ДОГОВОР
            Guid? ContractID = GetContractID(db, t);
            if (ContractID.HasValue)
            {
                c.ContractID = ContractID;
            }
            else
            {
                comments += "Договор не найден: " + GetContractName(t) + ".";
            }

            // 29 ПРОДАЖА - получаем из договора
            if (ContractID.HasValue)
            {
                c.OpportunityID = GetOpportunityIDFromContract(db, ContractID);
            }

            // 30 МЕНЕДЖЕР - получаем из договора
            if (ContractID.HasValue)
            {
                c.ManagerID = GetManagerIDFromContract(db, ContractID);
            }
            else
                if (AccountID.HasValue)
                {
                    c.ManagerID = GetManagerIDFromAccount(db, AccountID);
                }
                else
                {
                    c.ManagerID = GetDefaultManagerID();
                }

            // 31 если найден договор, но не найден контрагент
            if (ContractID.HasValue && !AccountID.HasValue)
            {
                AccountID = GetAccountIDFromContract(db, ContractID);
            }

            // 17 ПЛАТЕЛЬЩИК
            // 18 ПОЛУЧАТЕЛЬ
            if (cashflowType == CashflowType.Income)
            {
                c.PayerID = AccountID;
                c.RecipientID = GetCompanyID(t.Company);
            }
            else
            {
                c.PayerID = GetCompanyID(t.Company);
                c.RecipientID = AccountID;
            }
            // если назначение содержит номер счёта
            string PayDetails = t.НазначениеПлатежа;
            string InvoiceString = "счет ";
            if (PayDetails.Contains(InvoiceString))
            {
                int NumStart = PayDetails.IndexOf(InvoiceString) + 5;
                string substr1 = PayDetails.Substring(NumStart);
                int NumEnd = substr1.IndexOf(' ');
                string InvoiceNumber = substr1.Substring(0, NumEnd);
                // найти счёт
                // фильтр по номеру счёта
                List<tbl_Invoice> invoices = db.tbl_Invoice.Where(i => i.InvoiceNumber == InvoiceNumber).ToList();
                // фильтр по дате счёта (год)?
                invoices = invoices.Where(i => i.InvoiceDate.Year == DateTime.Now.Year).ToList();
                // фильтр по контрагенту
                if (AccountID.HasValue)
                {
                    invoices = invoices.Where(i => i.CustomerID == AccountID).ToList();
                }
                if (invoices.Count > 0)
                {
                    tbl_Invoice i = invoices.First();
                    c.InvoiceID = i.ID;
                }
            }
            c.Comments = comments;

            //t.КоррСчёт - пока не использовать
            c.ID = Guid.NewGuid();

            return c;
        }
コード例 #41
0
 private void CommitTransferToLocalList(Entities db, Transfer t, BankStatement statement)
 {
     tbl_Cashflow c = CreateCashflow(db, t, statement);
     statement.Cashflows.Add(c);
 }
コード例 #42
0
 private void UpdateExisting(BankStatement statement, CheckResult status)
 {
     var currentStatement = _statementsRepository.GetAll()
         .First(a => a.Operations.Any(b => b.Id == status.ExistingOperation.Id));
     var opToRemove = currentStatement.Operations.First(a => a.Id == status.ExistingOperation.Id);
     currentStatement.Operations.Remove(opToRemove);
     currentStatement.Replaced++;
     statement.Operations.Add(status.ExistingOperation);
     statement.Updated++;
     status.ExistingOperation.Cleared = true;
 }
コード例 #43
0
 private void CommitTransferToDatabase(Entities db, Transfer t, BankStatement statement)
 {
     tbl_Cashflow c = CreateCashflow(db, t, statement);
     db.AddTotbl_Cashflow(c);
     db.SaveChanges();
 }
コード例 #44
0
 private void AddNew(BankStatement statement, BankOperation item)
 {
     _operationRepository.Add(item);
     statement.Operations.Add(item);
     statement.New++;
 }
コード例 #45
0
 public override void Contribute(BankStatement statement)
 {
     var partOfStatement = string.Format("|| {0}||          ||", Formattedvalue());
     statement.Add(partOfStatement);
 }
コード例 #46
0
 public void SetUp()
 {
     _operationsRepository = new Mock<IRepository<BankOperation>>();
     _statementsRepository = new Mock<IRepository<BankStatement>>();
     _statementsRepository.Setup(par => par.Add(It.IsAny<BankStatement>()))
         .Callback<BankStatement>(st => _insertedStatement = st);
     _importer = new OperationsImporter(_operationsRepository.Object, _statementsRepository.Object);
 }