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);
        }
        private void MaiCompanyBalanceArbitrage(CompanyCash companyCash, InnerTransactionInsertDto dto, int mainCompanyId, MoneyAction moneyAction)
        {
            companyCash.Total     -= (dto.Amount + dto.OurComission);
            companyCash.ModifiedBy = _appSession.GetUserName();
            _unitOfWork.GenericRepository <CompanyCash>().Update(companyCash);

            var companyCahsFlow = new CompanyCashFlow()
            {
                CoinId      = dto.CoinId,
                CompanyId   = mainCompanyId,
                Total       = companyCash.Total,
                Amount      = -dto.Amount,
                Matched     = false,
                MoenyAction = moneyAction
            };

            _unitOfWork.GenericRepository <CompanyCashFlow>().Insert(companyCahsFlow);
        }
        private void AgentBalnaceArbitrage(InnerTransactionInsertDto dto, MoneyAction moneyAction)
        {
            var clientCash = _unitOfWork.GenericRepository <ClientCash>()
                             .FindBy(c => c.CoinId == dto.CoinId && c.ClientId == dto.AgentId)
                             .FirstOrDefault();

            clientCash.Total     += dto.Amount;
            clientCash.Total     += dto.AgentCommission;
            clientCash.ModifiedBy = _appSession.GetUserName();
            _unitOfWork.GenericRepository <ClientCash>().Update(clientCash);

            var clientCashFlow = new ClientCashFlow()
            {
                ClientId    = dto.AgentId,
                CoinId      = dto.CoinId,
                Total       = clientCash.Total,
                Amount      = dto.Amount,
                Matched     = false,
                MoenyAction = moneyAction
            };

            _unitOfWork.GenericRepository <ClientCashFlow>().Insert(clientCashFlow);
        }
        private void CompanyBlanceArbitrage(InnerTransactionInsertDto dto, MoneyAction moneyAction)
        {
            var companyCah = _unitOfWork.GenericRepository <CompanyCash>()
                             .FindBy(c => c.CoinId == dto.CoinId && c.CompanyId == dto.ReciverCompany.CompanyId)
                             .FirstOrDefault();

            companyCah.Total     += dto.Amount;
            companyCah.Total     += dto.ReciverCompany.CompanyCommission;
            companyCah.ModifiedBy = _appSession.GetUserName();
            _unitOfWork.GenericRepository <CompanyCash>().Update(companyCah);

            var companyCahsFlow = new CompanyCashFlow()
            {
                MoenyAction = moneyAction,
                Total       = companyCah.Total,
                Amount      = dto.Amount + dto.ReciverCompany.CompanyCommission,
                Matched     = false,
                CompanyId   = dto.ReciverCompany.CompanyId,
                CoinId      = dto.CoinId,
                CreatedBy   = _appSession.GetUserName()
            };

            _unitOfWork.GenericRepository <CompanyCashFlow>().Insert(companyCahsFlow);
        }