protected void MagicItemCommand(object sender, MagicItemEventArgs e)
 {
     if (e.CommandName == "Delete")
     {
         #region  除
         bool deleted = false;
         using (ISession session = new Session())
         {
             session.BeginTransaction();
             try
             {
                 foreach (RepeaterItem item in this.rptPO.Items)
                 {
                     HtmlInputCheckBox chk       = item.FindControl("checkbox") as HtmlInputCheckBox;
                     HtmlInputHidden   hidStatus = item.FindControl("hidStatus") as HtmlInputHidden;
                     if (chk != null && chk.Checked && !string.IsNullOrEmpty(chk.Value))
                     {
                         if (Cast.Enum <POStatus>(hidStatus.Value) == POStatus.New)
                         {
                             session.CreateEntityQuery <POLine>()
                             .Where(Exp.Eq("OrderNumber", chk.Value))
                             .Delete();
                             POHead.Delete(session, chk.Value);
                             deleted = true;
                         }
                     }
                 }
                 session.Commit();
                 if (deleted)
                 {
                     this.QueryAndBindData(session, this.magicPagerMain.CurrentPageIndex, this.magicPagerMain.PageSize, true);
                     WebUtil.ShowMsg(this, "选择的采购订单已经被删除", "操作成功");
                 }
             }
             catch (Exception ex)
             {
                 session.Rollback();
                 WebUtil.ShowError(this, ex);
             }
         }
         #endregion
     }
     else if (e.CommandName == "Complete")
     {
         #region 关闭采购订单
         bool completed = false;
         using (ISession session = new Session())
         {
             session.BeginTransaction();
             try
             {
                 foreach (RepeaterItem item in this.rptPO.Items)
                 {
                     HtmlInputCheckBox chk = item.FindControl("checkbox") as HtmlInputCheckBox;
                     if (chk != null && chk.Checked && !string.IsNullOrEmpty(chk.Value))
                     {
                         POHead poHead = POHead.Retrieve(session, chk.Value);
                         if (poHead.Status == POStatus.Release && poHead.ApproveResult == ApproveStatus.Approve)
                         {
                             poHead.Close(session);
                             completed = true;
                         }
                     }
                 }
                 session.Commit();
             }
             catch (Exception er)
             {
                 session.Rollback();
                 WebUtil.ShowError(this, er);
             }
             if (completed)
             {
                 this.QueryAndBindData(session, this.magicPagerMain.CurrentPageIndex, this.magicPagerMain.PageSize, true);
                 WebUtil.ShowMsg(this, "选择的采购订单已经完成", "操作成功");
             }
         }
         #endregion
     }
     else if (e.CommandName == "Publish")
     {
         #region 发布(送签单据)
         bool published = false;
         using (ISession session = new Session())
         {
             session.BeginTransaction();
             try
             {
                 foreach (RepeaterItem item in this.rptPO.Items)
                 {
                     HtmlInputCheckBox chk = item.FindControl("checkbox") as HtmlInputCheckBox;
                     if (chk != null && chk.Checked && !string.IsNullOrEmpty(chk.Value))
                     {
                         POHead poHead = POHead.Retrieve(session, chk.Value.Trim());
                         if (poHead.Status == POStatus.New)//为新建状态
                         {
                             poHead.Release(session);
                             published = true;
                         }
                     }
                 }
                 session.Commit();
             }
             catch (Exception er)
             {
                 session.Rollback();
                 WebUtil.ShowError(this, er);
             }
             if (published)
             {
                 this.QueryAndBindData(session, this.magicPagerMain.CurrentPageIndex, this.magicPagerMain.PageSize, true);
                 WebUtil.ShowMsg(this, "选择的采购订单已经发布", "操作成功");
             }
         }
         #endregion
     }
 }
    protected void MagicItemCommand(object sender, MagicItemEventArgs e)
    {
        if (e.CommandName == "Save")
        {
            #region 保存
            //txtPurchaseQty txtPlanDate txtPrice
            bool updated = false;
            using (_session = new Session())
            {
                POHead head = POHead.Retrieve(_session, this.OrderNumber);
                if (head == null || head.Status != POStatus.New)
                {
                    return;
                }

                _session.BeginTransaction();
                try
                {
                    foreach (RepeaterItem item in this.rptPL.Items)
                    {
                        HtmlInputCheckBox chk = item.FindControl("checkbox") as HtmlInputCheckBox;
                        if (!string.IsNullOrEmpty(chk.Value))
                        {
                            HtmlInputText txtPurchaseQty = item.FindControl("txtPurchaseQty") as HtmlInputText;
                            HtmlInputText txtPlanDate    = item.FindControl("txtPlanDate") as HtmlInputText;
                            HtmlInputText txtPrice       = item.FindControl("txtPrice") as HtmlInputText;
                            POLine        poLine         = POLine.Retrieve(_session, this.OrderNumber, chk.Value);
                            if (poLine == null || poLine.LineStatus != POLineStatus.Open)
                            {
                                continue;
                            }

                            poLine.PurchaseQty = Cast.Decimal(txtPurchaseQty.Value, poLine.PurchaseQty);
                            poLine.PlanDate    = Cast.DateTime(txtPlanDate.Value, poLine.PlanDate);
                            poLine.Price       = Cast.Decimal(txtPrice.Value, poLine.Price);
                            poLine.TaxID       = 0;
                            poLine.TaxValue    = 0M;
                            //含税额(含税采购成本)  TaxInclusiveAmt 含税额 = 数量*单价
                            poLine.TaxInclusiveAmt = poLine.PurchaseQty * poLine.Price;
                            //不含税额(采购成本) TaxExlusiveAmt 含税额-税额
                            poLine.TaxExlusiveAmt = 0M; // poLine.TaxInclusiveAmt / (1 + poLine.TaxValue);
                            //税额    TaxAmt  税额 = 不含税额*税率
                            poLine.TaxAmt = 0M;         //poLine.TaxExlusiveAmt * poLine.TaxValue;
                            poLine.Update(_session, "PurchaseQty", "TaxID", "TaxValue", "PlanDate", "Price", "TaxInclusiveAmt");
                            updated = true;
                        }
                    }
                    //更新统计信息
                    if (updated)
                    {
                        UpdatePOLineAndPoHead(_session, head);
                    }
                    _session.Commit();
                    if (updated)
                    {
                        BindPOLine(_session, head);
                        WebUtil.ShowMsg(this, "采购订单明细保存成功", "操作成功");
                    }
                }
                catch (Exception ex)
                {
                    _session.Rollback();
                    WebUtil.ShowError(this, ex);
                }
            }
            #endregion
        }
        else if (e.CommandName == "Cancel")
        {
            #region 取消明细
            bool updated = false;
            using (_session = new Session())
            {
                POHead head = POHead.Retrieve(_session, this.OrderNumber);
                if (head.Status != POStatus.Release)
                {
                    return;
                }

                _session.BeginTransaction();
                try
                {
                    foreach (RepeaterItem item in this.rptPL.Items)
                    {
                        HtmlInputCheckBox chk = item.FindControl("checkbox") as HtmlInputCheckBox;
                        if (chk != null && chk.Checked && !string.IsNullOrEmpty(chk.Value))
                        {
                            POLine poLine = POLine.Retrieve(_session, this.OrderNumber, chk.Value);
                            if (poLine == null || poLine.LineStatus != POLineStatus.Open)
                            {
                                continue;
                            }
                            poLine.LineStatus = POLineStatus.Cancel;
                            poLine.ModifyUser = Magic.Security.SecuritySession.CurrentUser.UserId;
                            poLine.ModifyTime = DateTime.Now;
                            poLine.Update(_session, "LineStatus", "ModifyUser", "ModifyTime");
                            updated = true;
                        }
                    }
                    //再次统计 POLine
                    if (updated)
                    {
                        UpdatePOLineAndPoHead(_session, head);
                    }
                    _session.Commit();

                    if (updated)
                    {
                        BindPOLine(_session, head);
                        WebUtil.ShowMsg(this, "选择的明细已经取消", "操作成功");
                    }
                }
                catch (Exception ex)
                {
                    _session.Rollback();
                    WebUtil.ShowError(this, ex);
                }
            }
            #endregion
        }
        else if (e.CommandName == "Delete")
        {
            #region  除明细
            bool deleted = false;
            using (_session = new Session())
            {
                POHead head = POHead.Retrieve(_session, this.OrderNumber);
                if (head == null || head.Status != POStatus.New)
                {
                    return;
                }

                _session.BeginTransaction();
                try
                {
                    foreach (RepeaterItem item in this.rptPL.Items)
                    {
                        HtmlInputCheckBox chk = item.FindControl("checkbox") as HtmlInputCheckBox;
                        if (chk != null && chk.Checked && !string.IsNullOrEmpty(chk.Value))
                        {
                            POLine line = POLine.Retrieve(_session, this.OrderNumber, chk.Value);
                            if (line.LineStatus != POLineStatus.Open)
                            {
                                continue;
                            }
                            line.Delete(_session);
                            deleted = true;
                        }
                    }
                    //再次统计 POLine
                    if (deleted)
                    {
                        UpdatePOLineAndPoHead(_session, head);
                    }
                    _session.Commit();

                    if (deleted)
                    {
                        BindPOLine(_session, head);
                        WebUtil.ShowMsg(this, "选择的明细已经删除", "操作成功");
                    }
                }
                catch (Exception ex)
                {
                    _session.Rollback();
                    WebUtil.ShowError(this, ex);
                }
            }
            #endregion
        }
        else if (e.CommandName == "Release" || e.CommandName == "Close")
        {
            #region 发布,关闭
            using (_session = new Session())
            {
                try
                {
                    POHead head = POHead.Retrieve(_session, this.OrderNumber);
                    _session.BeginTransaction();
                    if (e.CommandName == "Release")
                    {
                        head.Release(_session);
                    }
                    else
                    {
                        head.Close(_session);
                    }
                    _session.Commit();

                    BindPOLine(_session, head);
                    this.SetView(_session, head);
                    WebUtil.ShowMsg(this, "订单已经" + (e.CommandName == "Release" ? "发布" : "关闭"), "操作成功");
                }
                catch (Exception er)
                {
                    _session.Rollback();
                    WebUtil.ShowError(this, er);
                }
            }
            #endregion
        }
        else if (e.CommandName == "QuickAdd")
        {
            #region 快速添加
            using (_session = new Session())
            {
                //检查
                string   itemCode = this.txtItemCode.Value.Trim();
                string   color    = this.txtColorCode.Value.Trim().ToUpper();
                string   size     = this.txtSizeCode.Value.Trim().ToUpper();
                decimal  qty      = Cast.Decimal(this.txtPurchaseQty.Value.Trim(), 0M);
                decimal  price    = Cast.Decimal(this.txtPrice.Value.Trim(), 0M);
                DateTime date     = Cast.DateTime(this.txtDemandDate.Value.Trim(), new DateTime(1900, 1, 1));

                if (qty <= 0M)
                {
                    this.txtAlertMsg.InnerText = string.Format("采购数量{0}不是有效的数字", this.txtPurchaseQty.Value.Trim());
                    return;
                }
                if (price <= 0M)
                {
                    this.txtAlertMsg.InnerText = string.Format("单价{0}不是有效的数字", this.txtPrice.Value.Trim());
                    return;
                }
                if (date <= new DateTime(1900, 1, 1))
                {
                    this.txtAlertMsg.InnerText = string.Format("无效的需求日期{0}", this.txtDemandDate.Value.Trim());
                    return;
                }

                IList <ItemMaster> masters = _session.CreateEntityQuery <ItemMaster>()
                                             .Where(Exp.Eq("ItemCode", itemCode)).List <ItemMaster>();
                if (masters == null || masters.Count <= 0)
                {
                    this.txtAlertMsg.InnerText = string.Format("货号{0}不存在", itemCode);
                    return;
                }
                ItemColor objColor = ItemColor.Retrieve(_session, color);
                if (objColor == null)
                {
                    this.txtAlertMsg.InnerText = string.Format("颜色代码{0}不存在", color);
                    return;
                }
                IList <ItemSpec> skus = _session.CreateEntityQuery <ItemSpec>()
                                        .Where(Exp.Eq("ItemID", masters[0].ItemID) & Exp.Eq("ColorCode", objColor.ColorCode) & Exp.Eq("SizeCode", size))
                                        .List <ItemSpec>();
                if (skus == null || skus.Count <= 0)
                {
                    this.txtAlertMsg.InnerText = string.Format("不存在货号:{0} 颜色:{1} 尺码:{2}的SKU", itemCode, color, size);
                    return;
                }
                ItemSize objSize = ItemSize.Retrieve(_session, size, masters[0].CategoryID);
                if (objSize == null)
                {
                    this.txtAlertMsg.InnerText = string.Format("尺码{0}不存在", size);
                    return;
                }

                //添加操作
                POHead head = POHead.Retrieve(_session, this.OrderNumber);
                POLine line = new POLine();
                line.OrderNumber          = this.OrderNumber;
                line.LineNumber           = head.NextLineNumber();
                line.LineStatus           = POLineStatus.Open;
                line.SKUID                = skus[0].SKUID;
                line.PurchaseQty          = qty;
                line.Price                = price;
                line.TaxID                = 0;
                line.TaxValue             = 0M;
                line.TaxInclusiveAmt      = line.PurchaseQty * line.Price;
                line.TaxExlusiveAmt       = 0M; // line.TaxInclusiveAmt / (1 + line.TaxValue);
                line.TaxAmt               = 0M; //line.TaxExlusiveAmt * line.TaxValue;
                line.PlanDate             = date;
                line.ActualDate           = new DateTime(1900, 1, 1);
                line.ReceiveQty           = 0M;
                line.IQCQty               = 0M;
                line.UnfinishedReceiveQty = 0M;
                line.ModifyUser           = SecuritySession.CurrentUser.UserId;
                line.ModifyTime           = DateTime.Now;
                line.UnitID               = 0;

                try
                {
                    _session.BeginTransaction();
                    line.Create(_session);
                    head.Update(_session, "CurrentLineNumber");
                    this.UpdatePOLineAndPoHead(_session, head);
                    _session.Commit();
                    BindPOLine(_session, head);
                    this.txtAlertMsg.InnerText = "添加成功,订单行号为" + line.LineNumber;
                    this.txtPurchaseQty.Value  = "";
                }
                catch (Exception er)
                {
                    _session.Rollback();
                    WebUtil.ShowError(this, er);
                }
            }
            #endregion
        }
    }