public bool SaveInnerTransactions(InnerTransactionInsertListDto innerTransacrions)
        {
            try
            {
                _unitOfWork.CreateTransaction();

                var mainCompanyId = innerTransacrions.MainCompanyId;
                var note          = innerTransacrions.Note;
                //new line
                var mainCompnayCashe            = _unitOfWork.GenericRepository <CompanyCash>().FindBy(x => x.CompanyId == mainCompanyId);
                var incomeTransactionCollection = new IncomeTransactionCollection()
                {
                    CompnayId = mainCompanyId,
                    Note      = note,
                    CreatedBy = _appSession.GetUserName()
                };
                _unitOfWork.GenericRepository <IncomeTransactionCollection>().Insert(incomeTransactionCollection);

                foreach (var innerTransacrion in innerTransacrions.Transactions)
                {
                    var moneyAction = IncomeTrasactionForClient(innerTransacrion, mainCompanyId, innerTransacrions.Date, incomeTransactionCollection);

                    switch (innerTransacrion.TypeOfPay)
                    {
                    case TypeOfPay.Cash:
                        break;

                    case TypeOfPay.ClientsReceivables:
                    {
                        AgentBalnaceArbitrage(innerTransacrion, moneyAction);
                    }
                    break;

                    case TypeOfPay.CompaniesReceivables:
                    {
                        CompanyBlanceArbitrage(innerTransacrion, moneyAction);
                    }
                    break;

                    default:
                    {
                        return(false);
                    }
                    }
                    MaiCompanyBalanceArbitrage(mainCompnayCashe.Where(c => c.CoinId == innerTransacrion.CoinId).First(), innerTransacrion, mainCompanyId, moneyAction);
                }

                _unitOfWork.Save();
                _unitOfWork.Commit();

                return(true);
            }
            catch (Exception ex)
            {
                _unitOfWork.Rollback();
                Tracing.SaveException(ex);
                return(false);
            }
        }
        private MoneyAction IncomeTrasactionForClient(InnerTransactionInsertDto dto, int mainCompayId, DateTime date, IncomeTransactionCollection incomeTransactionCollection)
        {
            int branchId    = BranchHelper.Id;
            int treasuryId  = _appSession.GetCurrentTreasuryId();
            var transaction = new Transaction();

            transaction.Reason                      = "";
            transaction.SenderClient                = GetClient(dto.Sender);
            transaction.SenderBranchId              = branchId;
            transaction.ReceiverBranchId            = branchId;
            transaction.TreaseryId                  = treasuryId;
            transaction.IncomeTransactionCollection = incomeTransactionCollection;
            switch (dto.TypeOfPay)
            {
            case TypeOfPay.Cash:
            {
                transaction.ReciverClient = GetClient(dto.ReciverClinet);
                transaction.TypeOfPay     = TypeOfPay.Cash;
                transaction.Deliverd      = false;
            }
            break;

            case TypeOfPay.ClientsReceivables:
            {
                transaction.ReciverClientId         = dto.AgentId;
                transaction.ReciverClientCommission = dto.AgentCommission;
                transaction.TypeOfPay = TypeOfPay.ClientsReceivables;
                transaction.Deliverd  = true;
            }
            break;

            case TypeOfPay.CompaniesReceivables:
            {
                transaction.SenderCompanyId        = dto.ReciverCompany.CompanyId;
                transaction.SenderCompanyComission = dto.ReciverCompany.CompanyCommission;
                transaction.ReciverClient          = GetClient(dto.ReciverCompany.ReciverClinet);
                transaction.TypeOfPay = TypeOfPay.CompaniesReceivables;
                transaction.Deliverd  = true;
            }
            break;
            }
            transaction.CoinId            = dto.CoinId;
            transaction.ReceiverCompanyId = mainCompayId;
            transaction.Amount            = dto.Amount;

            transaction.TransactionType = TransactionType.ImportTransaction;
            //transaction.Note = note;
            transaction.OurComission       = dto.OurComission;
            transaction.TransactionsStatus = TransactionStatus.NotNotified;
            transaction.CreatedBy          = _appSession.GetUserName();
            _unitOfWork.GenericRepository <Transaction>().Insert(transaction);

            var moneyAction = new MoneyAction();

            moneyAction.Transaction = transaction;
            moneyAction.Date        = date;
            moneyAction.CreatedBy   = _appSession.GetUserName();
            _unitOfWork.GenericRepository <MoneyAction>().Insert(moneyAction);
            return(moneyAction);
        }