Ejemplo n.º 1
0
        public bool SaveAccount(object obj)
        {
            var _connection = ConnectionHelper.GetConnection();
            var sqlQuery    = SqlStringUtil.InsertString(obj.GetType());
            var shbAccount  = (SHBAccount)obj;

            Console.WriteLine(sqlQuery);
            var cmd = new MySqlCommand(sqlQuery, _connection);

            cmd.Parameters.AddWithValue("@Username", shbAccount.Username);
            cmd.Parameters.AddWithValue("@AccountNumber", shbAccount.AccountNumber);
            cmd.Parameters.AddWithValue("@Balance", shbAccount.Balance);
            cmd.Parameters.AddWithValue("@Password", shbAccount.Password);
            cmd.Parameters.AddWithValue("@CreatedAtMLS", shbAccount.CreatedAtMLS);
            cmd.Parameters.AddWithValue("@UpdatedAtMLS", shbAccount.UpdatedAtMLS);

            if (cmd.ExecuteNonQuery() == 1)
            {
                _connection.Close();
                return(true);
            }

            _connection.Close();
            return(false);
        }
Ejemplo n.º 2
0
        public CashFlowFixMapper(XPObjectSpace objSpace)
        {
            this.objSpace = objSpace;

            var sqlStringUtil = new SqlStringUtil();

            this.SqlDeclareClauses = CreateSqlDeclareClauses();
        }
Ejemplo n.º 3
0
        private void BeforeProcess(CriteriaOperator criteria)
        {
            var util = new SqlStringUtil();

            var conn    = (SqlConnection)objSpace.Session.Connection;
            var command = conn.CreateCommand();

            command.CommandText = util.AddSqlCriteria(BeforeSql, criteria);
            command.ExecuteNonQuery();
        }
Ejemplo n.º 4
0
        public BankStmtCalculator(XPObjectSpace objSpace)
        {
            this.objSpace = objSpace;

            var clauses = new List <SqlDeclareClause>()
            {
                new SqlDeclareClause("FuncCcy", "uniqueidentifier",
                                     "(SELECT TOP 1 FunctionalCurrency FROM SetOfBooks WHERE GCRecord IS NULL)")
            };

            var sqlUtil = new SqlStringUtil();

            parameterCommandText = sqlUtil.CreateCommandText(clauses);
        }
Ejemplo n.º 5
0
        public FixCashFlowsAlgorithm(XPObjectSpace objSpace, CashFlowFixParam paramObj, CashFlowFixMapper mapper)
        {
            this.objSpace = objSpace;
            this.paramObj = paramObj;

            if (paramObj.Snapshot == null)
            {
                currentSnapshot = GetCurrentSnapshot(objSpace.Session);
            }
            else
            {
                currentSnapshot = paramObj.Snapshot;
            }

            if (paramObj.ApReclassActivity != null)
            {
                paramApReclassActivity = objSpace.GetObjectByKey <Activity>(objSpace.GetKeyValue(paramObj.ApReclassActivity));
            }

            defaultCounterparty = objSpace.FindObject <Counterparty>(
                CriteriaOperator.Parse("Name LIKE ?", CashDiscipline.Common.Constants.DefaultFixCounterparty));

            var query = new XPQuery <CashForecastFixTag>(objSpace.Session);

            reversalFixTag = query
                             .Where(x => x.Name == CashDiscipline.Common.Constants.ReversalFixTag).FirstOrDefault();

            revRecFixTag = query
                           .Where(x => x.Name == CashDiscipline.Common.Constants.RevRecFixTag).FirstOrDefault();

            resRevRecFixTag = query
                              .Where(x => x.Name == CashDiscipline.Common.Constants.ResRevRecFixTag).FirstOrDefault();

            payrollFixTag = query
                            .Where(x => x.Name == CashDiscipline.Common.Constants.PayrollFixTag).FirstOrDefault();

            autoFixTag = query
                         .Where(x => x.Name == CashDiscipline.Common.Constants.AutoFixTag).FirstOrDefault();

            setOfBooks  = SetOfBooks.GetInstance(objSpace);
            this.mapper = mapper;

            this.sqlDeclareClauses = CreateSqlDeclareClauses();
            var sqlStringUtil = new SqlStringUtil();

            this.parameterCommandText = sqlStringUtil.CreateCommandText(sqlDeclareClauses);
        }
Ejemplo n.º 6
0
        private void BeforeProcess(IEnumerable objs)
        {
            var oids = new List <string>();

            foreach (BaseObject obj in objs)
            {
                oids.Add(string.Format("'{0}'", obj.Oid));
            }

            var util = new SqlStringUtil();

            var conn    = (SqlConnection)objSpace.Session.Connection;
            var command = conn.CreateCommand();

            command.CommandText = BeforeSql.Replace(SqlStringUtil.CriteriaToken, "AND Oid IN (" + string.Join(",", oids) + ")"); // replace {criteria} with filter
            command.ExecuteNonQuery();
        }
        public void Process()
        {
            var clauses = new List <SqlDeclareClause>()
            {
                new SqlDeclareClause("Snapshot", "uniqueidentifier",
                                     @"(SELECT TOP 1 [CurrentCashFlowSnapshot] FROM SetOfBooks WHERE GCRecord IS NULL)"),
                new SqlDeclareClause("ActualStatus", "int", Convert.ToInt32(CashFlowStatus.Actual).ToString()),
                new SqlDeclareClause("ForecastStatus", "int", Convert.ToInt32(CashFlowStatus.Forecast).ToString()),
                new SqlDeclareClause("Activity", "uniqueidentifier", "(SELECT TOP 1 [ForexSettleActivity] FROM SetOfBooks WHERE GCRecord IS NULL)"),
                new SqlDeclareClause("Source", "uniqueidentifier", "(SELECT TOP 1 [ForexSettleCashFlowSource] FROM SetOfBooks WHERE GCRecord IS NULL)")
            };

            var sqlStringUtil = new SqlStringUtil();

            var paramCommandText = sqlStringUtil.CreateCommandText(clauses);

            using (var cmd = ((SqlConnection)objSpace.Session.Connection).CreateCommand())
            {
                cmd.CommandText = paramCommandText + "\n\n" + ProcessCommandText;
                int result = cmd.ExecuteNonQuery();
            }
        }
Ejemplo n.º 8
0
        public bool SaveAccount(object obj)
        {
            var _connection = ConnectionHelper.GetConnection();
            var sqlQuery    = SqlStringUtil.InsertString(obj.GetType());
            var account     = (BlockChain)obj;

            Console.WriteLine(sqlQuery);
            var cmd = new MySqlCommand(sqlQuery, _connection);

            cmd.Parameters.AddWithValue("@WalletId", account.WalletId);
            cmd.Parameters.AddWithValue("@Balance", account.Balance);
            cmd.Parameters.AddWithValue("@Password", account.Password);
            cmd.Parameters.AddWithValue("@CreatedAt", account.CreatedAt);
            cmd.Parameters.AddWithValue("@UpdatedAt", account.UpdatedAt);

            if (cmd.ExecuteNonQuery() == 1)
            {
                _connection.Close();
                return(true);
            }

            _connection.Close();
            return(false);
        }
Ejemplo n.º 9
0
        public bool UpdateBalance(object currentLoggedInAccount, object historyTransaction)
        {
            var account          = (BlockChain)currentLoggedInAccount;
            var transactionBl    = (BlockChainTransaction)historyTransaction;
            var connection       = ConnectionHelper.GetConnection();
            var transactionBegin = connection.BeginTransaction(); // Khởi tạo transaction.

            try
            {
                /**
                 * 1. Lấy thông tin số dư mới nhất của tài khoản.
                 * 2. Kiểm tra kiểu transaction. Chỉ chấp nhận deposit và withdraw.
                 *     2.1. Kiểm tra số tiền rút nếu kiểu transaction là withdraw.
                 * 3. Update số dư vào tài khoản.
                 *     3.1. Tính toán lại số tiền trong tài khoản.
                 *     3.2. Update số tiền vào database.
                 * 4. Lưu thông tin transaction vào bảng transaction.
                 */

                // 1. Lấy thông tin số dư mới nhất của tài khoản.
                var          queryBalance        = "select balance from `blockchainaccount` where WalletId = @username";
                MySqlCommand queryBalanceCommand = new MySqlCommand(queryBalance, connection);
                queryBalanceCommand.Parameters.AddWithValue("@username", account.WalletId);
                var balanceReader = queryBalanceCommand.ExecuteReader();
                // Không tìm thấy tài khoản tương ứng, throw lỗi.
                if (!balanceReader.Read())
                {
                    // Không tồn tại bản ghi tương ứng, lập tức rollback transaction, trả về false.
                    // Hàm dừng tại đây.
                    throw new SHBModel.CustomError("Tai khoan không hợp lệ.");
                }

                // Đảm bảo sẽ có bản ghi.
                var currentBalance = balanceReader.GetDouble("Balance");
                balanceReader.Close();

                // 2. Kiểm tra kiểu transaction. Chỉ chấp nhận deposit và withdraw.
                if (transactionBl.Type != Transaction.TransactionType.Deposit &&
                    transactionBl.Type != Transaction.TransactionType.Withdraw)
                {
                    throw new SHBModel.CustomError("Kiểu giao dịch không hợp lệ.");
                }

                // 2.1. Kiểm tra số tiền rút nếu kiểu transaction là withdraw.
                if (transactionBl.Type == Transaction.TransactionType.Withdraw &&
                    transactionBl.Amount > currentBalance)
                {
                    throw new SHBModel.CustomError("Số tiền bạn rút lớn hơn số tiền còn trong tài khoản, vui lòng thử lại!");
                }

                // 3. Update số dư vào tài khoản.
                // 3.1. Tính toán lại số tiền trong tài khoản.
                if (transactionBl.Type == Transaction.TransactionType.Deposit)
                {
                    currentBalance += transactionBl.Amount;
                }
                else
                {
                    currentBalance -= transactionBl.Amount;
                }

                // 3.2. Update số dư vào database.
                var queryUpdateAccountBalance =
                    "update `shbaccount` set balance = @balance where Username = @username ";
                var cmdUpdateAccountBalance =
                    new MySqlCommand(queryUpdateAccountBalance, connection);
                cmdUpdateAccountBalance.Parameters.AddWithValue("@username", account.WalletId);
                cmdUpdateAccountBalance.Parameters.AddWithValue("@balance", currentBalance);
                var updateAccountResult = cmdUpdateAccountBalance.ExecuteNonQuery();

                // 4. Lưu thông tin transaction vào bảng transaction.
                var queryInsertTransaction = SqlStringUtil.InsertString(transactionBl.GetType());
                var cmdInsertTransaction   =
                    new MySqlCommand(queryInsertTransaction, connection);
                cmdInsertTransaction.Parameters.AddWithValue("@TransactionId", transactionBl.TransactionId);
                cmdInsertTransaction.Parameters.AddWithValue("@CreatedAt", transactionBl.CreatedAt);
                cmdInsertTransaction.Parameters.AddWithValue("@UpdatedAt", transactionBl.UpdatedAt);
                cmdInsertTransaction.Parameters.AddWithValue("@Type", transactionBl.Type);
                cmdInsertTransaction.Parameters.AddWithValue("@Amount", transactionBl.Amount);
                cmdInsertTransaction.Parameters.AddWithValue("@SenderWalletId",
                                                             transactionBl.SenderWalletId);
                cmdInsertTransaction.Parameters.AddWithValue("@ReceiverWalletId",
                                                             transactionBl.ReceiverWalletId);
                cmdInsertTransaction.Parameters.AddWithValue("@Status", transactionBl.Status);
                var insertTransactionResult = cmdInsertTransaction.ExecuteNonQuery();

                if (updateAccountResult == 1 && insertTransactionResult == 1)
                {
                    transactionBegin.Commit();
                    return(true);
                }
            }
            catch (SHBModel.CustomError)
            {
                transactionBegin.Rollback();
                return(false);
            }

            connection.Close();
            return(false);
        }
Ejemplo n.º 10
0
        public bool UpdateBalanceWhenTransfer(object historyTransaction_obj)
        {
            /*
             * 1. Kiểm tra số dư mới nhất.
             *     1.1 Người gửi.
             *     1.2 Người nhận.
             * 2. Kiểm tra kiểu transaction type chỉ nhận type là transfer.
             * 3. Tính toán lại số tiền của người gửi và nhận.
             *     3.1 Update số dư người nhận người gửi lên database.
             *         3.1.1 Người gửi.
             *         3.1.2 Người nhận.
             * 4. Lưu transaction vào bảng transaction trên database
             */
            var connection  = ConnectionHelper.GetConnection(); // Đảm bảo rằng đã kết nối đến db thành công.
            var transaction = connection.BeginTransaction();    // Khởi tạo transaction.

            var historyTransaction = (BlockChainTransaction)historyTransaction_obj;

            // 1. Kiểm tra số dư mới nhất.
            try
            {
                // 1.1 Người gửi.
                var queryBalanceAccountFrom =
                    "select balance from `BlockChainAccount` where WalletId = @walletIdFrom";
                var queryBalanceCommand =
                    new MySqlCommand(queryBalanceAccountFrom, connection);
                queryBalanceCommand.Parameters.AddWithValue("@walletIdFrom", Program._BL_CurrentLoggedIn.WalletId);
                var balanceAccountFrom = queryBalanceCommand.ExecuteReader();
                if (!balanceAccountFrom.Read())
                {
                    // Không tồn tại bản ghi tương ứng, lập tức rollback transaction, trả về false.
                    // Hàm dừng tại đây.
                    throw new SHBModel.CustomError("Tai khoan không hợp lệ.");
                }

                // Lấy balance hiện tại của ng gửi.
                var currentBalanceAccountFrom = balanceAccountFrom.GetDouble("Balance");
                balanceAccountFrom.Close();

                // 1.2 Người nhận.
                var queryBalanceAccountTo =
                    "select balance from `BlockChainAccount` where WalletId = @walletIdTo";
                var cmd = new MySqlCommand(queryBalanceAccountTo, connection);
                cmd.Parameters.AddWithValue("@walletIdTo", Program._BL_CurrentReceiverAccountNumber.WalletId);
                var balanceAccountTo = cmd.ExecuteReader();
                if (!balanceAccountTo.Read())
                {
                    // Không tồn tại bản ghi tương ứng, lập tức rollback transaction, trả về false.
                    // Hàm dừng tại đây.
                    throw new SHBModel.CustomError("Tai khoan không hợp lệ.");
                }

                // Lấy balance của người nhận.
                var currentBalanceAccountTo = balanceAccountTo.GetDouble("balance");
                balanceAccountTo.Close();

                // 2. Kiểm tra kiểu transaction type chỉ nhận type là transfer.
                if (historyTransaction.Type != Transaction.TransactionType.Transfer)
                {
                    throw new SHBModel.CustomError("Kiểu giao dịch không hợp lệ!");
                }

                if (historyTransaction.Type == Transaction.TransactionType.Transfer &&
                    historyTransaction.Amount > currentBalanceAccountFrom)
                {
                    throw new SHBModel.CustomError(
                              "Số tiền bạn muốn chuyển lớn hơn số tiền còn trong tài khoản của bạn, vui lòng thử lại.");
                }

                // 3. Tính toán lại số tiền của người gửi và nhận.
                if (historyTransaction.Type == Transaction.TransactionType.Transfer)
                {
                    currentBalanceAccountFrom -= historyTransaction.Amount;
                    currentBalanceAccountTo   += historyTransaction.Amount;
                }

                // 3.1 Update số dư người nhận người gửi lên database.
                // 3.1.1 Người gửi.
                var queryUpdateBalanceAccountFrom =
                    "update `BlockChainAccount` set balance = @balanceFrom where WalletId = @usernameFrom";
                var cmdUpdateAccountBalanceFrom =
                    new MySqlCommand(queryUpdateBalanceAccountFrom, connection);
                cmdUpdateAccountBalanceFrom.Parameters.AddWithValue("@usernameFrom",
                                                                    Program._SHB_CurrentLoggedIn.Username);
                cmdUpdateAccountBalanceFrom.Parameters.AddWithValue("@balanceFrom", currentBalanceAccountFrom);
                var updateAccountFromResult = cmdUpdateAccountBalanceFrom.ExecuteNonQuery();

                // 3.1.2 Người nhận.
                var queryUpdateBalanceAccountTo =
                    "update `BlockChainAccount` set balance = @balanceTo where WalletId = @usernameTo";
                var cmdUpdateBalanceAccountTo =
                    new MySqlCommand(queryUpdateBalanceAccountTo, connection);
                cmdUpdateBalanceAccountTo.Parameters.AddWithValue("@usernameTo",
                                                                  Program._SHB_CurrentReceiverAccountNumber.Username);
                cmdUpdateBalanceAccountTo.Parameters.AddWithValue("@balanceTo", currentBalanceAccountTo);
                var updateAccountToResult = cmdUpdateBalanceAccountTo.ExecuteNonQuery();

                // 4. Lưu thông tin transaction vào bảng transaction.
                var queryInsertTransaction = SqlStringUtil.InsertString(historyTransaction.GetType());
                var cmdInsertTransaction   =
                    new MySqlCommand(queryInsertTransaction, connection);
                cmdInsertTransaction.Parameters.AddWithValue("@TransactionId", historyTransaction.TransactionId);
                cmdInsertTransaction.Parameters.AddWithValue("@Type", historyTransaction.Type);
                cmdInsertTransaction.Parameters.AddWithValue("@Amount", historyTransaction.Amount);
                cmdInsertTransaction.Parameters.AddWithValue("@CreatedAt", historyTransaction.CreatedAt);
                cmdInsertTransaction.Parameters.AddWithValue("@UpdatedAt", historyTransaction.UpdatedAt);
                cmdInsertTransaction.Parameters.AddWithValue("@SenderWalletId",
                                                             historyTransaction.SenderWalletId);
                cmdInsertTransaction.Parameters.AddWithValue("@ReceiverWalletId",
                                                             historyTransaction.ReceiverWalletId);
                cmdInsertTransaction.Parameters.AddWithValue("@Status", historyTransaction.Status);
                var insertTransactionResult = cmdInsertTransaction.ExecuteNonQuery();

                if (updateAccountFromResult == 1 && updateAccountToResult == 1 && insertTransactionResult == 1)
                {
                    transaction.Commit();
                    return(true);
                }

                connection.Close();
                return(false);
            }
            catch (SHBModel.CustomError)
            {
                transaction.Rollback();
                return(false);
            }
        }