/// <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); } }
protected Tranday_Info GetTrandayById(string docId) { D_Tranday dt = new D_Tranday(); return(dt.GetOneTranday(docId)); }