private void ApproveAction(string command, int appItemId) { if (command != "Pass" && command != "Reject") { WebUtil.ShowError(this, "无效操作"); return; } bool approved = false; //MagicToolBar的事件 using (ISession session = new Session()) { try { session.BeginTransaction(); if (appItemId > 0) { if (command == "Pass") { OrderApproveItem.Approve(session, appItemId, this.txtAppNote.Value.Trim()); } else if (command == "Reject") { OrderApproveItem.Reject(session, appItemId, this.txtAppNote.Value.Trim()); } approved = true; } else { foreach (RepeaterItem item in this.repeatControl.Items) { HtmlInputCheckBox chk = item.FindControl("checkbox") as HtmlInputCheckBox; if (chk != null && chk.Checked && Cast.Int(chk.Value) > 0) { int appId = Cast.Int(chk.Value, 0); if (appId > 0) { if (command == "Pass") { OrderApproveItem.Approve(session, appId, this.txtAppNote.Value.Trim()); } else if (command == "Reject") { OrderApproveItem.Reject(session, appId, this.txtAppNote.Value.Trim()); } approved = true; } } } } session.Commit(); } catch (Exception err) { session.Rollback(); WebUtil.ShowError(this, err.Message, 300, 100); } if (approved) { WebUtil.ShowMsg(this, "选择的单据已经完成签核处理", "操作成功"); this.QueryAndBindData(session, this.magicPagerMain.CurrentPageIndex, this.magicPagerMain.PageSize, false); } } }
/// <summary> /// 送签单据 /// </summary> /// <param name="session"></param> /// <param name="order"></param> public static void ApproveThis(ISession session, IApprovable order) { log.DebugFormat("submit order {0} for approve", order.OrderNumber); OrderTypeDef typeDef = OrderTypeDef.Retrieve(session, order.OrderTypeCode); log.DebugFormat("OrderTypeDef {0} retrieved", order.OrderTypeCode); //不需要签核 if (!typeDef.NeedApprove) { log.DebugFormat("order type {0} don't need approval", order.OrderTypeCode); order.ApproveResult = ApproveStatus.Approve; order.Update(session, "ApproveResult"); order.OnApprove(session); session.PostCommit += order.PostApprove; return; } //检查该单据是否已经有未完成的签核项,避免重复生成 int count = session.CreateEntityQuery <OrderApproveItem>() .Where(Exp.Eq("OrderTypeCode", order.OrderTypeCode) & Exp.Eq("OrderNumber", order.OrderNumber) & Exp.Eq("Status", ApproveStatus.UnApprove)) .Count(); if (count > 0) { log.DebugFormat("order {0} has {1} unfinished approve items, maybe it's already in approving state", order.OrderNumber, count); throw new Exception(typeDef.TypeText + order.OrderNumber + "已经在签核中"); } IList <OrderApproveDef> appDefines = session.CreateEntityQuery <OrderApproveDef>() .Where(Exp.Eq("OrderTypeCode", order.OrderTypeCode)) .OrderBy("StepIndex") .List <OrderApproveDef>(); if (appDefines == null || appDefines.Count <= 0) { log.DebugFormat("no OrderApproveDef exists for order type {0}", order.OrderTypeCode); throw new Exception(string.Format("Approve defines error for order type {0}", order.OrderTypeCode)); } else { log.DebugFormat("{0} OrderApproveDef retrieved", appDefines.Count); } //生成签核项 OrderApproveItem appItem = new OrderApproveItem(); appItem.OrderTypeCode = order.OrderTypeCode; appItem.OrderNumber = order.OrderNumber; appItem.Status = ApproveStatus.UnApprove; appItem.ApproveTime = new DateTime(1900, 1, 1); appItem.SubmitUser = Magic.Security.SecuritySession.CurrentUser.UserId; appItem.SubmitTime = DateTime.Now; appItem.CreateUser = order.CreateUser; appItem.CreateTime = order.CreateTime; appItem.Create(session); log.DebugFormat("OrderApproveItem {0} created", appItem.ApproveID); for (int i = 0; i < appDefines.Count; i++) { OrderApproveResult appResult = new OrderApproveResult(); appResult.ApproveID = appItem.ApproveID; appResult.StepIndex = appDefines[i].StepIndex; appResult.ApproveUser = appDefines[i].UserID; appResult.HasFinished = false; if (i == 0) { appResult.ActiveItem = true; } else { appResult.ActiveItem = false; } appResult.ApproveResult = false; appResult.ApproveTime = new DateTime(1900, 1, 1); appResult.ApproveNote = " "; appResult.Create(session); log.DebugFormat("OrderApproveResult {0} created", appResult.ApproveResultID); } }