Example #1
0
 //**********************************************************************************
 public SqlCommand EditOneTrandayDetail(TrandayDetail_Info objTrandayDetailInfo)
 {
     try
     {
         SqlCommand command = new SqlCommand(
             @"UPDATE [TrandayDetail]
                        SET [Account_ID] = @Account_ID
                           ,[DB_Amount] = @DB_Amount
                           ,[CR_Amount] = @CR_Amount
                           ,[SEQ] = @SEQ
                           ,[Ccy] = @Ccy
                           ,[BalanceAvaiable] = @BalanceAvaiable
                      WHERE [ID] = @ID");
         command.CommandType = CommandType.Text;
         command.Parameters.Add("@ID", SqlDbType.Decimal).Value              = objTrandayDetailInfo.ID;
         command.Parameters.Add("@DocID", SqlDbType.NVarChar, 50).Value      = objTrandayDetailInfo.DocID;
         command.Parameters.Add("@Account_ID", SqlDbType.NVarChar, 50).Value = objTrandayDetailInfo.Account_ID;
         command.Parameters.Add("@DB_Amount", SqlDbType.Decimal).Value       = objTrandayDetailInfo.DB_Amount;
         command.Parameters.Add("@CR_Amount", SqlDbType.Decimal).Value       = objTrandayDetailInfo.CR_Amount;
         command.Parameters.Add("@SEQ", SqlDbType.Int).Value                 = objTrandayDetailInfo.SEQ;
         command.Parameters.Add("@Ccy", SqlDbType.NVarChar, 6).Value         = objTrandayDetailInfo.Ccy;
         command.Parameters.Add("@BalanceAvaiable", SqlDbType.Decimal).Value = objTrandayDetailInfo.BalanceAvaiable;
         this.AddCommand(command);
         return(command);
     }
     catch (Exception ex)
     { Logger.Error(ex); throw ex; }
 }
Example #2
0
        /// <summary>
        /// Hàm lấy giao dịch chi tiết đã khóa sổ
        /// </summary>
        /// <param name="docid">số chứng từ</param>
        /// <returns>thông tin chứng từ chi tiết</returns>
        public List <TrandayDetail_Info> GetOneTranYearDetail(string docid)
        {
            DataSet            ds = new DataSet();
            TrandayDetail_Info objTrandayDetail_Info = new TrandayDetail_Info();
            SqlConnection      objconn = new SqlConnection(GetConnectionString());
            SqlCommand         command = new SqlCommand("Select * From TranYearDetail Where DocID = @docid Order By DB_Amount ASC, CR_Amount ASC", objconn);

            command.CommandType = CommandType.Text;
            command.Parameters.Add("@docid", SqlDbType.NVarChar, 50).Value = docid;

            try
            {
                objconn.Open();
                SqlDataAdapter da = new SqlDataAdapter(command);
                da.Fill(ds);
                List <TrandayDetail_Info> list = new List <TrandayDetail_Info>();
                foreach (DataRow row in ds.Tables[0].Rows)
                {
                    list.Add(GenerateObject(row));
                }
                return(list);
            }
            catch (System.Exception ex)
            {
                Logger.Error(ex);
                return(null);
            }
            finally
            {
                objconn.Close();
            }
        }
Example #3
0
        //******************************************************************************
        public TrandayDetail_Info GetOneTrandayDetail(decimal id)
        {
            DataSet            ds = new DataSet();
            TrandayDetail_Info objTrandayDetail_Info = new TrandayDetail_Info();
            SqlConnection      objconn = new SqlConnection(GetConnectionString());
            SqlCommand         command = new SqlCommand("Select * From TrandayDetail Where ID = @ID", objconn);

            command.CommandType = CommandType.Text;
            command.Parameters.Add("@ID", SqlDbType.Decimal).Value = objTrandayDetail_Info.ID;

            try
            {
                objconn.Open();
                SqlDataAdapter da = new SqlDataAdapter(command);
                da.Fill(ds);
                return(GenerateObject(ds.Tables[0].Rows[0]));
            }
            catch (System.Exception ex)
            {
                Logger.Error(ex);
                return(null);
            }
            finally
            {
                objconn.Close();
            }
        }
Example #4
0
 public SqlCommand CreateOneTrandayDetail(TrandayDetail_Info objTrandayDetailInfo)
 {
     try
     {
         SqlCommand command = new SqlCommand(
             @"INSERT INTO [TrandayDetail]
                                ([DocID]
                                ,[Account_ID]
                                ,[DB_Amount]
                                ,[CR_Amount]
                                ,[SEQ]
                                ,[Ccy]
                                ,[BalanceAvaiable])
                          VALUES
                                (@DocID
                                ,@Account_ID
                                ,@DB_Amount
                                ,@CR_Amount
                                ,@SEQ
                                ,@Ccy
                                ,@BalanceAvaiable)");
         command.CommandType = CommandType.Text;
         command.Parameters.Add("@DocID", SqlDbType.NVarChar, 50).Value      = objTrandayDetailInfo.DocID;
         command.Parameters.Add("@Account_ID", SqlDbType.NVarChar, 50).Value = objTrandayDetailInfo.Account_ID;
         command.Parameters.Add("@DB_Amount", SqlDbType.Decimal).Value       = objTrandayDetailInfo.DB_Amount;
         command.Parameters.Add("@CR_Amount", SqlDbType.Decimal).Value       = objTrandayDetailInfo.CR_Amount;
         command.Parameters.Add("@SEQ", SqlDbType.Int).Value                 = objTrandayDetailInfo.SEQ;
         command.Parameters.Add("@Ccy", SqlDbType.NVarChar, 6).Value         = objTrandayDetailInfo.Ccy;
         command.Parameters.Add("@BalanceAvaiable", SqlDbType.Decimal).Value = objTrandayDetailInfo.BalanceAvaiable;
         this.AddCommand(command);
         return(command);
     }
     catch (Exception ex)
     { Logger.Error(ex); throw ex; }
 }
Example #5
0
        public BaseTranDetail(TranCodeDetailFull_Info trancodedetail, string accountIdCust)
        {
            if (trancodedetail == null)
            {
                throw new Exception("trancodedetail is null or empty");
            }

            _trandaydetail = new TrandayDetail_Info();
            // kiểm tra gan tài khoản khách hàng.
            D_Account    dalAccount = new D_Account();
            Account_Info acInfo;

            if (trancodedetail.Is_Account_Cust == true)
            {
                // Xác định sự tồn tại của tài khoản khách hàng
                acInfo = dalAccount.GetOneAccount(accountIdCust);
                if (acInfo == null)
                {
                    throw new Exception("AccountId Customer not found");
                }
                _trandaydetail.Account_ID = accountIdCust;
            }
            else
            {
                List <Account_Info> list = dalAccount.GetListAccountLike(trancodedetail.Account_ID, trancodedetail.Categories);
                if (list.Count > 1 || list.Count == 0)
                {
                    throw new Exception("AccountId invalid");
                }
                _trandaydetail.Account_ID = list[0].Account_ID;
            }
            _trancodedetail    = trancodedetail;
            _trandaydetail.SEQ = trancodedetail.SEQ;
            switch (trancodedetail.NumberType)
            {
            case NumberType.FixAmount:
                if (trancodedetail.CreditDebit == "DB")
                {
                    _trandaydetail.DB_Amount = (decimal)trancodedetail.NumberValue;
                    _completed = true;
                }
                else
                {
                    _trandaydetail.CR_Amount = (decimal)trancodedetail.NumberValue;
                    _completed = true;
                }
                break;

            default:
                _trandaydetail.DB_Amount = 0;
                _trandaydetail.CR_Amount = 0;
                _completed = false;
                break;
            }
        }
Example #6
0
        /// <summary
        /// hàm chuyển giá trị datarow về dạng cấu trúc Trandaydetail_Info
        /// </summary>
        /// <param name="row"></param>
        /// <returns></returns>
        private TrandayDetail_Info GenerateObject(DataRow row)
        {
            if (row == null)
            {
                throw new Exception("Trandaydetail object does not exists");
            }

            TrandayDetail_Info tdi = new TrandayDetail_Info();

            if (row["ID"] != DBNull.Value)
            {
                tdi.ID = Convert.ToDecimal(row["ID"]);
            }
            if (row["DocID"] != DBNull.Value)
            {
                tdi.DocID = Convert.ToString(row["DocID"]);
            }
            if (row["Account_ID"] != DBNull.Value)
            {
                tdi.Account_ID = Convert.ToString(row["Account_ID"]);
            }
            if (row["db_Amount"] != DBNull.Value)
            {
                tdi.DB_Amount = Convert.ToDecimal(row["db_Amount"]);
            }
            if (row["Cr_Amount"] != DBNull.Value)
            {
                tdi.CR_Amount = Convert.ToDecimal(row["Cr_Amount"]);
            }
            if (row["SEQ"] != DBNull.Value)
            {
                tdi.SEQ = Convert.ToInt16(row["SEQ"]);
            }
            if (row["Ccy"] != DBNull.Value)
            {
                tdi.Ccy = Convert.ToString(row["Ccy"]);
            }
            if (row["BalanceAvaiable"] != DBNull.Value)
            {
                tdi.BalanceAvaiable = Convert.ToDecimal(row["BalanceAvaiable"]);
            }
            return(tdi);
        }
Example #7
0
        public xml_response Retail(string trancode, string accountId, decimal amount, string descript)
        {
            try
            {
                _res = new xml_response();
                _res.function_name = this.ToString() +
                                     string.Format(".Retail({0}, {1}, {2},{3})", trancode, accountId, amount, descript);
                if (logger.IsDebugEnabled)
                {
                    logger.Debug(string.Format("Start function: {0}", _res.function_name));
                }
                // kiểm tra trancode
                Trancode_Info trancodeInfo = _dalTrancode.GetOneTranCode(trancode);
                if (trancodeInfo == null)
                {
                    _res.SetError("99", string.Format("Trancode Id: {0} not found", trancode));
                    if (logger.IsErrorEnabled)
                    {
                        logger.Error(string.Format("{0}\t{1}", _res.error_code, _res.error_msg));
                    }
                    return(_res);
                }
                if (trancodeInfo.CodeType == CodeType.FundTransfer)
                {
                    _res.SetError("99", string.Format("Trancode Id: {0} invalid code type", trancode));
                    if (logger.IsErrorEnabled)
                    {
                        logger.Error(string.Format("{0}\t{1}", _res.error_code, _res.error_msg));
                    }
                    return(_res);
                }

                Tranday_Info trandayInfo = new Tranday_Info();
                _transdate               = BaseParameters.ToDay().TransDate;
                trandayInfo.DocID        = GenerateDocId(); // tạo số chứng từ mới
                trandayInfo.Trace        = trandayInfo.DocID;
                trandayInfo.TransDate    = _transdate;
                trandayInfo.ValueDate    = _transdate;
                trandayInfo.Status       = TransactionStatus.Approved;
                trandayInfo.Branch_ID    = _channel.Branch;
                trandayInfo.AllowReverse = trancodeInfo.AllowReverse;
                if (string.IsNullOrEmpty(descript))
                {
                    trandayInfo.Descript = string.Format("Retail: {0} with amount={1}", accountId, amount);
                }
                else
                {
                    trandayInfo.Descript = descript;
                }
                trandayInfo.NextDocId     = "";
                trandayInfo.OtherRef      = "";
                trandayInfo.TranCode      = trancode;
                trandayInfo.UserCreate    = _channel.UserLogin;
                trandayInfo.Verified      = true;
                trandayInfo.Verified_User = _channel.UserLogin;

                _dalTranday.CreateOneTranday(trandayInfo);

                // lấy mã giao dịch được định nghĩa cách hạch toán
                List <TranCodeDetail_Info> list = _dalTrancode.GetTranCodeDetailByCode(trancode);
                if (list == null)
                {
                    _res.SetError("30", string.Format("Can't load trancodedetail: {0}", trancode));
                    if (logger.IsErrorEnabled)
                    {
                        logger.Error(string.Format("{0}\t{1}", _res.error_code, _res.error_msg));
                    }
                    _dalTranday.ClearCommand();
                    return(_res);
                }
                D_Account           dalAc = new D_Account();
                TrandayDetail_Info  tid;
                List <Account_Info> AcList;
                Account_Info        tmpAc;
                D_TrandayDetail     trand       = new D_TrandayDetail();
                decimal             remain_amnt = 0; // số tiền còn lại
                decimal             db_amnt;
                decimal             cr_amnt;
                decimal             sum_db_amnt = 0;
                decimal             sum_cr_amnt = 0;
                bool find_ac = false;

                tmpAc = dalAc.GetOneAccount(accountId);
                if (tmpAc == null)
                {
                    _res.SetError("11", string.Format("{0} does not exists", accountId));
                    if (logger.IsErrorEnabled)
                    {
                        logger.Error(string.Format("{0}\t{1}", _res.error_code, _res.error_msg));
                    }
                    _dalTranday.ClearCommand();
                    return(_res);
                }
                #region Build Trandaydetail

                foreach (TranCodeDetail_Info tcdi in list)
                {
                    AcList  = new List <Account_Info>();
                    tid     = new TrandayDetail_Info();
                    db_amnt = 0;
                    cr_amnt = 0;

                    #region Find Account_ID

                    if (tcdi.Is_Account_Cust)
                    {
                        // là tài khoản khách hàng
                        AcList = dalAc.GetListAccountLike(tcdi.Account_ID);
                        foreach (Account_Info acInfo in AcList)
                        {
                            if (accountId == acInfo.Account_ID)
                            {
                                find_ac = true;
                                break;
                            }
                        }
                        if (find_ac == false)
                        {
                            // không xác định được nhóm tài khoản khách hàng
                            _res.SetError("31", string.Format("{0} not in group {1}", accountId, tcdi.Account_ID));
                            if (logger.IsErrorEnabled)
                            {
                                logger.Error(string.Format("{0}\t{1}", _res.error_code, _res.error_msg));
                            }
                            _dalTranday.ClearCommand();
                            return(_res);
                        }
                    }
                    else
                    {
                        // là tài khoản đã được định danh chi tiết
                        AcList = dalAc.GetListAccountLike(tcdi.Account_ID);
                        if (AcList.Count > 1)
                        {
                            // nếu xác định được nhiều tài khoản thì lỗi
                            _res.SetError("31", string.Format("{0} does too many accounts", tcdi.Account_ID));
                            if (logger.IsErrorEnabled)
                            {
                                logger.Error(string.Format("{0}\t{1}", _res.error_code, _res.error_msg));
                            }
                            _dalTranday.ClearCommand();
                            return(_res);
                        }
                        if (AcList.Count == 0)
                        {
                            // không xác định được tài khoản
                            _res.SetError("31", string.Format("{0} Invalid account id", tcdi.Account_ID));
                            if (logger.IsErrorEnabled)
                            {
                                logger.Error(string.Format("{0}\t{1}", _res.error_code, _res.error_msg));
                            }
                            _dalTranday.ClearCommand();
                            return(_res);
                        }
                        tmpAc = AcList[0];
                    }

                    #endregion

                    tid.Account_ID = tmpAc.Account_ID;
                    tid.Ccy        = tmpAc.Ccy;
                    tid.SEQ        = tcdi.SEQ;

                    if (!tcdi.Master)
                    {
                        switch (tcdi.NumberType)
                        {
                        case NumberType.FixAmount:
                            // Kiểm tra số dư fix
                            if ((decimal)tcdi.NumberValue > amount - remain_amnt)
                            {
                                _res.SetError("",
                                              string.Format("fix amount is {0} greater than {1}", tcdi.NumberValue,
                                                            amount - remain_amnt));
                                if (logger.IsErrorEnabled)
                                {
                                    logger.Error(string.Format("{0}\t{1}", _res.error_code, _res.error_msg));
                                }
                                _dalTranday.ClearCommand();
                                return(_res);
                            }
                            if (tcdi.CreditDebit == CreditDebit.DB)
                            {
                                db_amnt = (decimal)tcdi.NumberValue;
                            }
                            else
                            {
                                cr_amnt = (decimal)tcdi.NumberValue;
                            }
                            break;

                        case NumberType.Percentage:
                            if (tcdi.CreditDebit == CreditDebit.DB)
                            {
                                db_amnt = amount * (decimal)tcdi.NumberValue;
                            }
                            else
                            {
                                cr_amnt = amount * (decimal)tcdi.NumberValue;
                            }
                            break;

                        default:
                            if (tcdi.CreditDebit == CreditDebit.DB)
                            {
                                db_amnt = amount - remain_amnt;
                            }
                            else
                            {
                                cr_amnt = amount - remain_amnt;
                            }
                            break;
                        }
                        if (tcdi.CreditDebit == CreditDebit.DB)
                        {
                            remain_amnt += db_amnt;
                        }
                        else
                        {
                            remain_amnt += cr_amnt;
                        }
                    }
                    else
                    {
                        if (tcdi.CreditDebit == CreditDebit.DB)
                        {
                            db_amnt = amount;
                        }
                        else
                        {
                            cr_amnt = amount;
                        }
                    }
                    tid.DB_Amount = db_amnt;
                    tid.CR_Amount = cr_amnt;
                    tid.DocID     = trandayInfo.DocID;
                    // ===============================
                    // kiểm tra điều kiện hạch toán ==
                    // ===============================
                    decimal temp_amnt = 0;
                    if (tcdi.CreditDebit == CreditDebit.DB)
                    {
                        temp_amnt = tid.DB_Amount;
                    }
                    else
                    {
                        temp_amnt = tid.CR_Amount;
                    }
                    if (!CheckAccountRules(tmpAc, tcdi.CreditDebit, temp_amnt))
                    {
                        _res.SetError("15", _msgRule);
                        if (logger.IsErrorEnabled)
                        {
                            logger.Error(string.Format("{0}\t{1}", _res.error_code, _res.error_msg));
                        }
                        _dalTranday.ClearCommand();
                        return(_res);
                    }
                    // ===============================
                    // ghi nợ tài khoản
                    tmpAc.d_Debit += tid.DB_Amount;
                    tmpAc.w_Debit += tid.DB_Amount;
                    tmpAc.m_Debit += tid.DB_Amount;
                    tmpAc.q_Debit += tid.DB_Amount;
                    tmpAc.y_Debit += tid.DB_Amount;
                    // ghi có tài khoản.
                    tmpAc.d_Credit += tid.CR_Amount;
                    tmpAc.w_Credit += tid.CR_Amount;
                    tmpAc.m_Credit += tid.CR_Amount;
                    tmpAc.q_Credit += tid.CR_Amount;
                    tmpAc.y_Credit += tid.CR_Amount;

                    tmpAc.Last_Date = DateTime.Now;
                    // Cập nhật số dư mới
                    tid.BalanceAvaiable = tmpAc.BalanceAvaiable;
                    // thực hiện câu lệnh
                    // Kiểm tra điều kiện số dư hạch toán nợ/có
                    if ((tid.DB_Amount == 0) && (tid.CR_Amount == 0))
                    {
                        break;
                    }
                    else
                    {
                        _dalTranday.AddCommand(trand.CreateOneTrandayDetail(tid));
                        _dalTranday.AddCommand(dalAc.EditOneAccount(tmpAc));
                        // ghi nhận tổng nợ và tổng có
                        sum_db_amnt += db_amnt;
                        sum_cr_amnt += cr_amnt;
                    }
                } // end forearch

                #endregion

                // với bút toán nhiều chân thì kiểm tra cân đối tổng nợ và tổng có
                if (list.Count > 1)
                {
                    if (sum_cr_amnt != sum_db_amnt)
                    {
                        // không cân đối giữa tổng nợ và tổng có
                        _res.SetError("52",
                                      string.Format("total debit ({0}) and total credit ({1}) is difference",
                                                    sum_db_amnt,
                                                    sum_cr_amnt));
                        if (logger.IsErrorEnabled)
                        {
                            logger.Error(string.Format("{0}\t{1}", _res.error_code, _res.error_msg));
                        }
                        _dalTranday.ClearCommand();
                        return(_res);
                    }
                }
                if (string.IsNullOrEmpty(_docId))
                {
                    _docId = trandayInfo.DocID;
                }
                if (!string.IsNullOrEmpty(trancodeInfo.NextCode))
                {
                    Retail(trancodeInfo.NextCode, accountId, amount, descript);
                }
                else
                // ghi nhận hạch toán
                if (_dalTranday.Execute())
                // Lấy thông tin giao dịch
                {
                    _res.Transactions = base.GetTrandayById(_docId).RenderXML();
                    _docId            = String.Empty;
                }
                else
                {
                    _res.SetError("99", _dalTranday.GetException.Message);
                    if (logger.IsErrorEnabled)
                    {
                        logger.Error(string.Format("{0}\t{1}", _res.error_code, _res.error_msg));
                    }
                    _docId = String.Empty;
                    _dalTranday.ClearCommand();
                }
            }
            catch (Exception ex)
            {
                _res.SetError("99", ex.Message);
                if (logger.IsErrorEnabled)
                {
                    logger.Error(ex);
                }
                _docId = String.Empty;
                _dalTranday.ClearCommand();
            }
            return(_res);
        }
Example #8
0
        public xml_response Fundtransfer(string trancode, string fromAccount, string toAccount, decimal amount, string descript)
        {
            try
            {
                _res = new xml_response();
                _res.function_name = this.ToString() +
                                     string.Format(".Fundtransfer({0}, {1}, {2}, {3},{4})", trancode, fromAccount,
                                                   toAccount, amount, descript);
                if (logger.IsDebugEnabled)
                {
                    logger.Debug(string.Format("Start function: {0}", _res.function_name));
                }
                // kiểm tra trancode
                Trancode_Info trancodeInfo = _dalTrancode.GetOneTranCode(trancode);
                if (trancodeInfo == null)
                {
                    _res.SetError("99", string.Format("Trancode Id: {0} not found", trancode));
                    if (logger.IsErrorEnabled)
                    {
                        logger.Error(string.Format("{0}\t{1}", _res.error_code, _res.error_msg));
                    }
                    return(_res);
                }
                if (trancodeInfo.CodeType != CodeType.FundTransfer)
                {
                    _res.SetError("99", string.Format("Trancode Id: {0} invalid code type", trancode));
                    if (logger.IsErrorEnabled)
                    {
                        logger.Error(string.Format("{0}\t{1}", _res.error_code, _res.error_msg));
                    }
                    return(_res);
                }

                // kiểm tra tài khoản đã có hay chưa
                string db_account = fromAccount;
                string cr_account = toAccount;

                if (_dalAc.GetOneAccount(db_account) == null)
                {
                    _res.SetError("11", string.Format("From account {0} does not found", db_account));
                    if (logger.IsErrorEnabled)
                    {
                        logger.Error(string.Format("{0}\t{1}", _res.error_code, _res.error_msg));
                    }
                    return(_res);
                }
                if (_dalAc.GetOneAccount(cr_account) == null)
                {
                    _res.SetError("11", string.Format("From account {0} does not found", cr_account));
                    if (logger.IsErrorEnabled)
                    {
                        logger.Error(string.Format("{0}\t{1}", _res.error_code, _res.error_msg));
                    }
                    return(_res);
                }
                // kiểm tra số dư chuyển khoản.
                Tranday_Info trandayInfo = new Tranday_Info();
                trandayInfo.AllowReverse = trancodeInfo.AllowReverse;
                trandayInfo.Branch_ID    = _channel.Branch;
                if (string.IsNullOrEmpty(descript))
                {
                    trandayInfo.Descript = string.Format("transfer from {0} to {1} with amount = {2}", db_account, cr_account, amount);
                }
                else
                {
                    trandayInfo.Descript = descript;
                }
                trandayInfo.NextDocId = "";
                trandayInfo.Status    = TransactionStatus.Approved;

                _transdate = BaseParameters.ToDay().TransDate;

                trandayInfo.TranCode      = trancode;
                trandayInfo.TransDate     = _transdate;
                trandayInfo.UserCreate    = _channel.UserLogin;
                trandayInfo.ValueDate     = _transdate;
                trandayInfo.Verified      = true;
                trandayInfo.Verified_User = _channel.UserLogin;
                trandayInfo.DocID         = base.GenerateDocId();
                trandayInfo.Trace         = trandayInfo.DocID;

                _dalTranday.CreateOneTranday(trandayInfo);

                D_TrandayDetail     dalTrandaydetail;
                TrandayDetail_Info  trandaydetailInfo;
                Account_Info        ai                       = new Account_Info();
                List <Account_Info> ac_list                  = new List <Account_Info>();
                bool                       find_ac           = false;
                D_TranCodeDetail           dalTrancodedetail = new D_TranCodeDetail();
                List <TranCodeDetail_Info> list              = dalTrancodedetail.GetTranCodeDetailByCode(trancode);
                if (list == null)
                {
                    _res.SetError("30", string.Format("Can't load trancodedetail: {0}", trancode));
                    if (logger.IsErrorEnabled)
                    {
                        logger.Error(string.Format("{0}\t{1}", _res.error_code, _res.error_msg));
                    }
                    _dalTranday.ClearCommand();
                    return(_res);
                }
                foreach (TranCodeDetail_Info tcdi in list)
                {
                    dalTrandaydetail  = new D_TrandayDetail();
                    trandaydetailInfo = new TrandayDetail_Info();
                    switch (tcdi.CreditDebit)
                    {
                    case  CreditDebit.DB:
                        ac_list = _dalAc.GetListAccountLike(tcdi.Account_ID);
                        foreach (Account_Info acInfo in ac_list)
                        {
                            if (db_account == acInfo.Account_ID)
                            {
                                find_ac = true;
                                break;
                            }
                        }
                        if (find_ac == false)
                        {
                            // không xác định được nhóm tài khoản khách hàng
                            _res.SetError("31", string.Format("{0} not in group {1}", db_account, tcdi.Account_ID));
                            if (logger.IsErrorEnabled)
                            {
                                logger.Error(string.Format("{0}\t{1}", _res.error_code, _res.error_msg));
                            }
                            _dalTranday.ClearCommand();
                            return(_res);
                        }
                        trandaydetailInfo.Account_ID = db_account;
                        trandaydetailInfo.DB_Amount  = amount;
                        ai = _dalAc.GetOneAccount(trandaydetailInfo.Account_ID);
                        // kiểm tra luật hạch toán
                        if (!CheckAccountRules(ai, CreditDebit.DB, amount))
                        {
                            _res.SetError("15", _msgRule);
                            _dalTranday.ClearCommand();
                            return(_res);
                        }
                        // ghi nợ tài khoản.
                        ai.y_Debit           += amount;
                        ai.q_Debit           += amount;
                        ai.m_Debit           += amount;
                        ai.w_Debit           += amount;
                        ai.d_Debit           += amount;
                        trandaydetailInfo.Ccy = ai.Ccy;
                        break;

                    case CreditDebit.CR:
                        ac_list = _dalAc.GetListAccountLike(tcdi.Account_ID);
                        foreach (Account_Info acInfo in ac_list)
                        {
                            if (cr_account == acInfo.Account_ID)
                            {
                                find_ac = true;
                                break;
                            }
                        }
                        if (find_ac == false)
                        {
                            // không xác định được nhóm tài khoản khách hàng
                            _res.SetError("31", string.Format("{0} not in group {1}", cr_account, tcdi.Account_ID));
                            if (logger.IsErrorEnabled)
                            {
                                logger.Error(string.Format("{0}\t{1}", _res.error_code, _res.error_msg));
                            }
                            _dalTranday.ClearCommand();
                            return(_res);
                        }
                        trandaydetailInfo.Account_ID = cr_account;
                        trandaydetailInfo.CR_Amount  = amount;
                        ai = _dalAc.GetOneAccount(trandaydetailInfo.Account_ID);
                        // kiểm tra luật hạch toán
                        if (!CheckAccountRules(ai, CreditDebit.CR, amount))
                        {
                            _res.SetError("15", _msgRule);
                            _dalTranday.ClearCommand();
                            return(_res);
                        }
                        // ghi có tài khoản.
                        ai.y_Credit          += amount;
                        ai.q_Credit          += amount;
                        ai.m_Credit          += amount;
                        ai.w_Credit          += amount;
                        ai.d_Credit          += amount;
                        trandaydetailInfo.Ccy = ai.Ccy;
                        break;
                    }
                    trandaydetailInfo.SEQ   = tcdi.SEQ;
                    trandaydetailInfo.DocID = trandayInfo.DocID;
                    // cập nhật số dư mới
                    trandaydetailInfo.BalanceAvaiable = ai.BalanceAvaiable;
                    // cập nhật thời gian
                    ai.Last_Date = DateTime.Now;
                    // thực hiện câu lệnh
                    _dalTranday.AddCommand(dalTrandaydetail.CreateOneTrandayDetail(trandaydetailInfo));
                    _dalTranday.AddCommand(_dalAc.EditOneAccount(ai));
                }
                if (string.IsNullOrEmpty(_docId))
                {
                    _docId = trandayInfo.DocID;
                }
                if (!string.IsNullOrEmpty(trancodeInfo.NextCode))
                {
                    Fundtransfer(trancodeInfo.NextCode, fromAccount, toAccount, amount, descript);
                }
                else
                // ghi nhận hạch toán
                if (!_dalTranday.Execute())
                {
                    _res.SetError("99", _dalTranday.GetException.Message);
                    if (logger.IsErrorEnabled)
                    {
                        logger.Error(string.Format("{0}\t{1}", _res.error_code, _res.error_msg));
                    }
                    _docId = String.Empty;
                    _dalTranday.ClearCommand();
                }
                else
                // Lấy thông tin giao dịch
                {
                    _res.Transactions = base.GetTrandayById(_docId).RenderXML();
                    _docId            = String.Empty;
                }
            }
            catch (Exception ex)
            {
                _res.SetError("99", ex.Message);
                if (logger.IsErrorEnabled)
                {
                    logger.Error(ex);
                }
                _docId = String.Empty;
                _dalTranday.ClearCommand();
            }
            return(_res);
        }
Example #9
0
        /// <summary>
        /// tạo mới giao dịch mua hàng
        /// </summary>
        /// <param name="docid">số chứng từ hạch toán (phải duy nhất trong giai đoạn mở sổ)</param>
        /// <param name="account_id">tài khoản ghi nợ của khách hàng mua hàng</param>
        /// <param name="amount">số tiền mua hàng</param>
        /// <param name="descript">mô tả chi tiết giao dịch mua hàng</param>
        /// <returns>trả về 1 nếu thành công và 0 nếu không thành công</returns>
        public ResponseMessage Retail(string trace, string pan, decimal amount, string descript)
        {
            ResponseMessage msg = new ResponseMessage();

            msg.LocalDate   = DateTime.Now.ToString("MMdd");
            msg.LocalTime   = DateTime.Now.ToString("hhmmss");
            msg.SystemTrace = trace;

            D_Tranday dt = new D_Tranday();

            // kiểm tra số chứng từ đã có hay chưa
            if (dt.IsExists("", trace))
            {
                logger.Error(string.Format("Transaction {0} does exists", trace));
                msg.ResponseCode = "12";
                return(msg);
            }

            Tranday_Info ti = new Tranday_Info();

            // tạo lại số chứng từ mới
            ti.DocID = base.GenerateDocId();

            msg.RetrievalRefNum = ti.DocID;

            ti.Trace         = trace;
            ti.TransDate     = transdate;
            ti.ValueDate     = transdate;
            ti.Status        = TransactionStatus.Approved;
            ti.Branch_ID     = branch_id;
            ti.AllowReverse  = true;
            ti.Descript      = descript;
            ti.NextDocId     = "";
            ti.OtherRef      = "";
            ti.TranCode      = retail_trancode;
            ti.UserCreate    = user_id;
            ti.Verified      = true;
            ti.Verified_User = user_id;
            dt.CreateOneTranday(ti);
            // lấy mã giao dịch được định nghĩa cách hạch toán
            D_TranCodeDetail           dtd  = new D_TranCodeDetail();
            List <TranCodeDetail_Info> list = dtd.GetTranCodeDetailByCode(retail_trancode);

            if (list == null)
            {
                if (logger.IsErrorEnabled)
                {
                    logger.Error(string.Format("Can't load trancodedetail: {0}", retail_trancode));
                }
                msg.ResponseCode = "06";
                return(msg);
            }
            D_Account           da = new D_Account();
            TrandayDetail_Info  tid;
            List <Account_Info> ac_list;
            Account_Info        tmp_ac;
            D_TrandayDetail     trand = new D_TrandayDetail();

            #region Build Trandaydetail
            foreach (TranCodeDetail_Info tcdi in list)
            {
                ac_list = new List <Account_Info>();
                tid     = new TrandayDetail_Info();
                #region Xác định tài khoản hạch toán
                if (tcdi.Is_Account_Cust)
                {
                    // là tài khoản khách hàng
                    // so sánh tài khoản khách hàng có thuộc nhóm tài khoản định nghĩa.
                    // tài khoản chi tiết: 10100099992222
                    // thuộc nhóm tài khoản 101000
                    if (pan.IndexOf(tcdi.Account_ID) != 0)
                    {
                        // không xác định được nhóm tài khoản khách hàng
                        if (logger.IsErrorEnabled)
                        {
                            logger.Error(string.Format("{0} not in group {1}", pan, tcdi.Account_ID));
                        }
                        msg.ResponseCode = "14";    // Invalid card number
                        return(msg);
                    }
                    tmp_ac = da.GetOneAccount(pan);
                    if (tmp_ac == null)
                    {
                        if (logger.IsErrorEnabled)
                        {
                            logger.Error(string.Format("{0} does not exists", pan));
                        }
                        msg.ResponseCode = "14";    // Invalid card number
                        return(msg);
                    }
                }
                else
                {
                    // là tài khoản nội bộ
                    ac_list = da.GetListAccountLike(tcdi.Account_ID);
                    // nếu xác định được nhiều tài khoản thì lỗi
                    if (ac_list.Count > 1)
                    {
                        if (logger.IsErrorEnabled)
                        {
                            logger.Error(string.Format("{0} does too many accounts", tcdi.Account_ID));
                        }
                        msg.ResponseCode = "14";    // Invalid card number
                        return(msg);
                    }
                    tmp_ac = ac_list[0];
                }
                #endregion
                tid.Account_ID = tmp_ac.Account_ID;
                tid.Ccy        = tmp_ac.Ccy;
                tid.SEQ        = tcdi.SEQ;
                if (!string.IsNullOrEmpty(tcdi.NumberType.ToString()))
                {
                    switch (tcdi.NumberType)
                    {
                    case NumberType.FixAmount:
                        if (tcdi.CreditDebit == CreditDebit.DB)
                        {
                            tid.DB_Amount = (decimal)tcdi.NumberValue;
                        }
                        else
                        {
                            tid.CR_Amount = (decimal)tcdi.NumberValue;
                        }
                        break;

                    case NumberType.Percentage:
                        if (tcdi.CreditDebit == CreditDebit.DB)
                        {
                            tid.DB_Amount = amount * (decimal)tcdi.NumberValue;
                        }
                        else
                        {
                            tid.CR_Amount = amount * (decimal)tcdi.NumberValue;
                        }
                        break;

                    default:
                        if (tcdi.CreditDebit == CreditDebit.DB)
                        {
                            tid.DB_Amount = amount;
                        }
                        else
                        {
                            tid.CR_Amount = amount;
                        }
                        break;
                    }
                }
                else
                {
                    if (tcdi.CreditDebit == CreditDebit.DB)
                    {
                        tid.DB_Amount = amount;
                    }
                    else
                    {
                        tid.CR_Amount = amount;
                    }
                }
                tid.DocID = ti.DocID;
                // cập nhật thông tin tài khoản
                tmp_ac.d_Debit += tid.DB_Amount;
                tmp_ac.w_Debit += tid.DB_Amount;
                tmp_ac.m_Debit += tid.DB_Amount;
                tmp_ac.q_Debit += tid.DB_Amount;
                tmp_ac.y_Debit += tid.DB_Amount;

                tmp_ac.d_Credit += tid.CR_Amount;
                tmp_ac.w_Credit += tid.CR_Amount;
                tmp_ac.m_Credit += tid.CR_Amount;
                tmp_ac.q_Credit += tid.CR_Amount;
                tmp_ac.y_Credit += tid.CR_Amount;

                dt.AddCommand(trand.CreateOneTrandayDetail(tid));
                dt.AddCommand(da.EditOneAccount(tmp_ac));
            }
            #endregion
            if (dt.Execute() == true)
            {
                // thực hiện giao dịch thành công
                if (logger.IsDebugEnabled)
                {
                    logger.Debug(string.Format("Done create new one retail transaction: {0}", ti.DocID));
                }
                msg.ResponseCode = "00";    // Approved
                return(msg);
            }
            else
            {
                // thực hiện giao dịch không thành công
                if (logger.IsErrorEnabled)
                {
                    logger.Error(string.Format("Fails create new one retail transaction: {0}", ti.DocID));
                }
                msg.ResponseCode = "06";    // Error
                return(msg);
            }
        }
Example #10
0
        /// <summary>
        /// chuyển khoản từ tài khoản db_account sang tài khoản cr_account
        /// (ghi nợ tài khoản db_account và ghi có tài khoản cr_account)
        /// </summary>
        /// <param name="amount">số tiền chuyển khoản</param>
        /// <param name="from_account">tài khoản ghi nợ</param>
        /// <param name="to_account">tài khoản ghi có</param>
        /// <returns>
        /// 0 không thành công
        /// 1 thành công
        /// </returns>
        public ResponseMessage FundTransfer(string trace, decimal amount, string db_account, string cr_account)
        {
            ResponseMessage msg = new ResponseMessage();

            msg.LocalDate = DateTime.Now.ToString("MMdd");
            msg.LocalTime = DateTime.Now.ToString("hhmmss");

            D_Tranday dt = new D_Tranday();

            // kiểm tra số chứng từ đã tồn tại hay chưa
            if (dt.IsExists("", trace))
            {
                logger.Error(string.Format("Transaction {0} does exists", trace));
                msg.ResponseCode = "12";    // Invalid transaction
                return(msg);
            }
            // kiểm tra hai tài khoản đã có hay chưa
            D_Account da = new D_Account();

            if (da.GetOneAccount(db_account) == null)
            {
                logger.Error(string.Format("From account {0} does not found", db_account));
                msg.ResponseCode = "78";    //No Account
                return(msg);
            }
            if (da.GetOneAccount(cr_account) == null)
            {
                logger.Error(string.Format("To account {0} does not found", cr_account));
                msg.ResponseCode = "78";    //No Account
                return(msg);
            }
            // kiểm tra số dư chuyển khoản.
            Tranday_Info ti = new Tranday_Info();

            ti.AllowReverse  = true;
            ti.Branch_ID     = branch_id;
            ti.Descript      = string.Format("transfer from {0} to {1} with amount = {2}", db_account, cr_account, amount);
            ti.NextDocId     = "";
            ti.Status        = TransactionStatus.Approved;
            ti.TranCode      = fundtransfer_trancode;
            ti.TransDate     = transdate;
            ti.UserCreate    = user_id;
            ti.ValueDate     = transdate;
            ti.Verified      = true;
            ti.Verified_User = user_id;
            ti.Trace         = trace;
            ti.DocID         = base.GenerateDocId();
            dt.CreateOneTranday(ti);
            D_TrandayDetail            dtd;
            TrandayDetail_Info         tdi;
            Account_Info               ai   = new Account_Info();
            D_TranCodeDetail           dcd  = new D_TranCodeDetail();
            List <TranCodeDetail_Info> list = dcd.GetTranCodeDetailByCode(fundtransfer_trancode);

            foreach (TranCodeDetail_Info tcdi in list)
            {
                dtd = new D_TrandayDetail();
                tdi = new TrandayDetail_Info();
                switch (tcdi.CreditDebit)
                {
                case  CreditDebit.DB:
                    if (db_account.IndexOf(tcdi.Account_ID) != 0)
                    {
                        // không xác định được nhóm tài khoản khách hàng
                        if (logger.IsErrorEnabled)
                        {
                            logger.Error(string.Format("{0} not in group {1}", db_account, tcdi.Account_ID));
                        }
                        msg.ResponseCode = "78";        //No Account
                        return(msg);
                    }
                    tdi.Account_ID = db_account;
                    tdi.DB_Amount  = amount;
                    ai             = da.GetOneAccount(tdi.Account_ID);
                    ai.y_Debit    += amount;
                    ai.q_Debit    += amount;
                    ai.m_Debit    += amount;
                    ai.w_Debit    += amount;
                    ai.d_Debit    += amount;
                    tdi.Ccy        = ai.Ccy;
                    break;

                case CreditDebit.CR:
                    if (cr_account.IndexOf(tcdi.Account_ID) != 0)
                    {
                        // không xác định được nhóm tài khoản khách hàng
                        if (logger.IsErrorEnabled)
                        {
                            logger.Error(string.Format("{0} not in group {1}", cr_account, tcdi.Account_ID));
                        }
                        msg.ResponseCode = "78";        //No Account
                        return(msg);
                    }
                    tdi.Account_ID = cr_account;
                    tdi.CR_Amount  = amount;
                    ai             = da.GetOneAccount(tdi.Account_ID);
                    ai.y_Credit   += amount;
                    ai.q_Credit   += amount;
                    ai.m_Credit   += amount;
                    ai.w_Credit   += amount;
                    ai.d_Credit   += amount;
                    tdi.Ccy        = ai.Ccy;
                    break;
                }
                tdi.SEQ   = tcdi.SEQ;
                tdi.DocID = ti.DocID;
                dt.AddCommand(dtd.CreateOneTrandayDetail(tdi));
                dt.AddCommand(da.EditOneAccount(ai));
            }
            if (dt.Execute() == true)
            {
                if (logger.IsDebugEnabled)
                {
                    logger.Debug(string.Format("Done transfer from {0} to {1}", db_account, cr_account));
                }
                msg.ResponseCode = "00";    //Approved
                return(msg);
            }
            else
            {
                if (logger.IsErrorEnabled)
                {
                    logger.Error(string.Format("Fails transfer from {0} to {1}", db_account, cr_account));
                }
                msg.ResponseCode = "06";    //Error
                return(msg);
            }
        }