// 取得帳務資料 - By RecordID public AccountingViewModel GetAccountingViewModel(long RecordID) { AccountingViewModel result = new AccountingViewModel(); DynamicParameters pars = new DynamicParameters(); sql = "select AB.*, C.Name OperatorName from "; sql += "(select A.*, B.Name MemberName from [SpadesKing].[dbo].[Accounting] A left join [SpadesKing].[dbo].[Member] B on A.MemberID = B.RecordID ) AB "; sql += "left join [SpadesKing].[dbo].[User] C on AB.OperatorID = C.RecordID "; sql += "where AB.RecordID = @RecordID "; pars.Add("@RecordID", RecordID); try { using (clsDBDapper db = new clsDBDapper()) { result = db.ToClass <AccountingViewModel>(sql, pars).FirstOrDefault(); } } catch (Exception ex) { result = null; } return(result); }
// 取得編輯資料 - 租金結帳 public RentMD GetRentMD(long RecordID) { AccountingViewModel accounting = GetAccountingViewModel(RecordID); return(new RentMD { RecordID = accounting.RecordID, Integration = accounting.Integration, Status = accounting.Status, UpdateTime = accounting.UpdateTime, OperatorName = accounting.OperatorName }); }
// 取得帳務資料 - By All Columns public AccountingViewModel GetAccountingViewModel(Accounting Data) { AccountingViewModel result = new AccountingViewModel(); DynamicParameters pars = new DynamicParameters(); sql = "select AB.*, C.Name OperatorName from "; sql += "(select A.*, B.Name MemberName from [SpadesKing].[dbo].[Accounting] A left join [SpadesKing].[dbo].[Member] B on A.MemberID = B.RecordID ) AB "; sql += "left join [SpadesKing].[dbo].[User] C on AB.OperatorID = C.RecordID "; sql += "where AB.Type = @Type and AB.PaymentType = @PaymentType and AB.Integration = @Integration and AB.Status = @Status and AB.UpdateTime = @UpdateTime and AB.OperatorID = @OperatorID and "; sql += Data.MemberID == null ? "AB.MemberID is null and " : "AB.MemberID = @MemberID and "; sql += Data.OrderNo == null ? "AB.OrderNo is null " : "AB.OrderNo = @OrderNo "; pars.Add("@Type", Data.Type); pars.Add("@PaymentType", Data.PaymentType); pars.Add("@Integration", Data.Integration); pars.Add("@OrderNo", Data.OrderNo); pars.Add("@MemberID", Data.MemberID); pars.Add("@UpdateTime", Data.UpdateTime); pars.Add("@OperatorID", Data.OperatorID); pars.Add("@Status", Data.Status); try { using (clsDBDapper db = new clsDBDapper()) { result = db.ToClass <AccountingViewModel>(sql, pars).FirstOrDefault(); } } catch (Exception ex) { result = null; } return(result); }
// 餐點取消 public OperationResult <OrderViewModel> CancelOrder(OrderMD Data, AuthModel Operator) { OperationResult <OrderViewModel> result = new OperationResult <OrderViewModel>(); AccountingViewModel accounting = GetAccountingViewModel(Data.OrderNo); DateTime processTime = DateTime.Now; // 驗證帳務紀錄 if (accounting == null) { result.Status = false; result.Message = "取消失敗 : 系統錯誤,無法取得帳務紀錄"; result.Data = null; return(result); } // 驗證刪除狀態 if (accounting.Status.Equals(Accounting_Status.Cancel)) { result.Status = false; result.Message = "取消失敗 : 帳務紀錄已取消"; result.Data = null; return(result); } // 驗證管理者密碼 if (!Data.AdministratorPwd.Equals(ConfigurationManager.AppSettings["AdministratorPwd"].Trim())) { result.Status = false; result.Message = "取消失敗 : 管理者密碼錯誤"; result.Data = null; return(result); } using (clsDBDapper db = new clsDBDapper()) { try { // 開啟交易 db.TransactionStart(string.Format("Accounting_CancelOrder_{0}", Operator.ID)); // 會員結帳 - 更新會員積分資訊 & 建立操作紀錄 if (accounting.PaymentType == Accounting_PaymentType.Member) { // 更新會員積分資訊 RepositoryMember repoMember = new RepositoryMember(); OperationResult resultMember = repoMember.UpdateBalance(db, new BalanceOperationInfo { MemberID = Convert.ToInt64(accounting.MemberID), MemberPwd = null, Integration = accounting.Integration, UpdateTime = processTime, OperatorID = Operator.ID, OperationType = BalanceOperationInfo_OperationType.Import, ValidationType = BalanceOperationInfo_ValidationType.None, UpdateConsumptionDate = true }); if (!resultMember.Status) { throw new Exception(resultMember.Message); } // 建立積分操作紀錄 RepositoryOperationRecord repoOperationRecord = new RepositoryOperationRecord(); OperationResult resultOperationRecord = repoOperationRecord.Create(db, new OperationRecord { MemberID = Convert.ToInt64(accounting.MemberID), OperationType = OperationRecord_OperationType.CancelOrder, Integration = accounting.Integration, Note = null, UpdateTime = processTime, OperatorID = Operator.ID }); if (!resultOperationRecord.Status) { throw new Exception(resultOperationRecord.Message); } } // 積分結帳 if (accounting.PaymentType == Accounting_PaymentType.Member || accounting.PaymentType == Accounting_PaymentType.Integration) { // 建立積分發行紀錄 RepositoryIssueRecord repoIssueRecord = new RepositoryIssueRecord(); OperationResult resultIssueRecord = repoIssueRecord.Create(db, new IssueRecord { OperationType = IssueRecord_OperationType.Export, Integration = accounting.Integration, Category = IssueRecord_Category.CancelOrder, UpdateTime = processTime, OperatorID = Operator.ID }); if (!resultIssueRecord.Status) { throw new Exception(resultIssueRecord.Message); } } // 更新點餐紀錄 RepositoryOrder repoOrder = new RepositoryOrder(); OperationResult resultOrder = repoOrder.Cancel(db, new Order { OrderNo = accounting.OrderNo, Status = Order_Status.Canceled, UpdateTime = processTime, OperatorID = Operator.ID }); if (!resultOrder.Status) { throw new Exception(resultOrder.Message); } // 更新帳務紀錄 OperationResult resultAccounting = Cancel(db, new Accounting { Status = Accounting_Status.Cancel, UpdateTime = processTime, OperatorID = Operator.ID, RecordID = accounting.RecordID }); if (!resultAccounting.Status) { throw new Exception(resultAccounting.Message); } // 確認及關閉交易 db.TransactionCommit(); db.TransactionDispose(); // 製作回傳結果 result.Type = "CancelOrder"; result.Status = true; result.Message = "取消成功"; result.Data.AddRange(repoOrder.GetOrderViewModel(accounting.OrderNo)); } catch (Exception ex) { // 回復資料 db.TransactionRollBack(); result.Status = false; result.Message = "取消失敗 : " + ex.Message; } } return(result); }
// 租金取消 public OperationResult <AccountingViewModel> CancelRent(RentMD Data, AuthModel Operator) { OperationResult <AccountingViewModel> result = new OperationResult <AccountingViewModel>(); RepositoryIssueRecord repoIssueRecord = new RepositoryIssueRecord(); OperationResult resultIssueRecord, resultAccounting; DateTime processTime = DateTime.Now; AccountingViewModel accounting = GetAccountingViewModel(Data.RecordID); // 驗證帳務紀錄 if (accounting == null) { result.Status = false; result.Message = "取消失敗 : 系統錯誤,無法取得帳務紀錄"; result.Data = null; return(result); } // 驗證刪除狀態 if (accounting.Status.Equals(Accounting_Status.Cancel)) { result.Status = false; result.Message = "取消失敗 : 帳務紀錄已取消"; result.Data = null; return(result); } // 驗證管理者密碼 if (!Data.AdministratorPwd.Equals(ConfigurationManager.AppSettings["AdministratorPwd"].Trim())) { result.Status = false; result.Message = "取消失敗 : 管理者密碼錯誤"; result.Data = null; return(result); } using (clsDBDapper db = new clsDBDapper()) { try { // 開啟交易 db.TransactionStart(string.Format("Accounting_CancelRent_{0}", Operator.ID)); // 建立發行紀錄 IssueRecord dataIssueRecord = new IssueRecord { OperationType = IssueRecord_OperationType.Export, Integration = accounting.Integration, Category = IssueRecord_Category.CancelRent, UpdateTime = processTime, OperatorID = Operator.ID }; resultIssueRecord = repoIssueRecord.Create(db, dataIssueRecord); if (!resultIssueRecord.Status) { throw new Exception(resultIssueRecord.Message); } // 取消帳務紀錄 Accounting dataAccounting = new Accounting { RecordID = accounting.RecordID, Type = accounting.Type, PaymentType = accounting.PaymentType, Integration = accounting.Integration, Status = Accounting_Status.Cancel, OrderNo = accounting.OrderNo, MemberID = accounting.MemberID, UpdateTime = processTime, OperatorID = Operator.ID }; resultAccounting = Cancel(db, dataAccounting); if (!resultAccounting.Status) { throw new Exception(resultAccounting.Message); } // 確認及關閉交易 db.TransactionCommit(); db.TransactionDispose(); // 製作回傳結果 result.Type = "CancelRent"; result.Status = true; result.Message = "取消成功"; result.Data.Add(GetAccountingViewModel(dataAccounting)); } catch (Exception ex) { // 回復資料 db.TransactionRollBack(); result.Status = false; result.Message = "取消失敗 : " + ex.Message; result.Data = null; } } return(result); }