Exemple #1
0
        /// <summary>
        /// tạo mới một giao dịch đảo ngược
        /// thêm một bản ghi vào bảng tranday
        /// thêm một bản ghi vào bảng trandaydetail
        /// nhưng với số tiền ghi âm mục đich triệt tiêu doanh số
        /// </summary>
        /// <param name="docid">
        /// số chứng từ hay mã số giao dịch cần đảo ngược
        /// hệ thống sẽ sinh ra số chứng từ mới hạch toán âm
        /// với số chứng từ là số chứng từ cần đảo ngược cộng với 2 ký tự ".1"
        /// </param>
        /// <returns>
        /// giá trị trả về là số giao dịch được tạo (1)
        /// nếu lỗi trả về giá trị 0
        /// </returns>
        public ResponseMessage Reverse(string trace, string docid)
        {
            ResponseMessage msg = new ResponseMessage();

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

                D_Tranday    dt = new D_Tranday();
                Tranday_Info ti = dt.GetOneTranday(trace);
                if (ti == null)
                {
                    logger.Error(string.Format("Transaction {0} does not exists", trace));
                    msg.ResponseCode = "12";  // Invalid transaction
                    return(msg);
                }
                if (ti.AllowReverse == false)
                {
                    logger.Error(string.Format("Transaction {0} does not allow reverse", trace));
                    msg.ResponseCode = "06";  // Error
                    return(msg);
                }
                // cập nhật hồ sơ giao dịch không cho cho phép đảo ngược nữa
                ti.AllowReverse = false;
                dt.EditOneTranday(ti);
                ti.Descript      = string.Format("REVERSE: {0}", trace);
                ti.DocID         = base.GenerateDocId();
                ti.Trace         = trace;
                ti.OtherRef      = docid;
                ti.NextDocId     = "";
                ti.Status        = TransactionStatus.Approved;
                ti.TransDate     = transdate;
                ti.ValueDate     = transdate;
                ti.Verified      = true;
                ti.Verified_User = user_id;
                ti.UserCreate    = user_id;
                dt.CreateOneTranday(ti);
                D_Account       da = new D_Account();
                Account_Info    ai;
                D_TrandayDetail dtd = new D_TrandayDetail();
                foreach (TrandayDetail_Info tdi in ti.TrandayDetails)
                {
                    tdi.CR_Amount *= -1;
                    tdi.DB_Amount *= -1;
                    tdi.DocID      = ti.DocID;
                    dt.AddCommand(dtd.CreateOneTrandayDetail(tdi));

                    ai = da.GetOneAccount(tdi.Account_ID);
                    // ghi có tài khoản.
                    ai.y_Credit += tdi.CR_Amount;
                    ai.q_Credit += tdi.CR_Amount;
                    ai.m_Credit += tdi.CR_Amount;
                    ai.w_Credit += tdi.CR_Amount;
                    ai.d_Credit += tdi.CR_Amount;
                    // ghi nợ tài khoản.
                    ai.y_Debit += tdi.DB_Amount;
                    ai.q_Debit += tdi.DB_Amount;
                    ai.m_Debit += tdi.DB_Amount;
                    ai.w_Debit += tdi.DB_Amount;
                    ai.d_Debit += tdi.DB_Amount;
                    dt.AddCommand(da.EditOneAccount(ai));
                }
                if (dt.Execute())
                {
                    // nếu thực hiện thành công
                    if (logger.IsDebugEnabled)
                    {
                        logger.Debug(string.Format("Done create new merchant transaction: {0}", ti.DocID));
                    }
                    msg.ResponseCode = "00";  // Approved
                    return(msg);
                }
                else
                {
                    if (logger.IsErrorEnabled)
                    {
                        logger.Error(string.Format("Fails create new one merchant transaction: {0}", ti.DocID));
                    }
                    msg.ResponseCode = "06";  // Error
                    return(msg);
                }
            }
            catch (Exception ex)
            {
                logger.Error(ex);
                msg.ResponseCode = "06";  // Error
                return(msg);
            }
        }
Exemple #2
0
        protected Tranday_Info GetTrandayById(string docId)
        {
            D_Tranday dt = new D_Tranday();

            return(dt.GetOneTranday(docId));
        }