Beispiel #1
0
    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);
            }
        }
    }
Beispiel #2
0
        /// <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);
            }
        }