protected void MagicItemCommand(object sender, MagicItemEventArgs e)
 {
     if (e.CommandName == "Save")
     {
         this.SetView(SavePOHead());
     }
     else if (e.CommandName == "Paid")
     {
         try
         {
             using (ISession session = new Session())
             {
                 POHead po = POHead.Retrieve(session, this.OrderNumber);
                 po.HasPaid = true;
                 po.Update(session, "HasPaid");
                 this.cmdPaid.Visible = false;
                 this.lblPaid.Text    = "是";
                 WebUtil.ShowMsg(this, "已付款操作成功");
             }
         }
         catch (Exception er)
         {
             WebUtil.ShowError(this, "操作失败:" + er.Message);
         }
     }
 }
 public POHead SavePOHead()
 {
     using (ISession session = new Session())
     {
         try
         {
             POHead poHead = null;
             if (this.IsNew)
             {
                 //新增
                 poHead                   = new POHead();
                 poHead.OrderNumber       = ERPUtil.NextOrderNumber(POHead.ORDER_TYPE);
                 this.txtOrderNumber.Text = poHead.OrderNumber;
                 poHead.CompanyID         = -1;
                 poHead.LocationCode      = this.drpLocationCode.SelectedValue;
                 poHead.PurchGroupCode    = this.drpPurchGroupCode.SelectedValue;
                 poHead.VendorID          = Cast.Int(this.drpVendorID.SelectedValue, 0);
                 poHead.Status            = POStatus.New;
                 poHead.TaxAmt            = 0M;
                 poHead.TaxExclusiveAmt   = 0M;
                 poHead.TaxInclusiveAmt   = 0M;
                 poHead.ShippingAddress   = this.txtShippingAddress.Text.Trim();
                 poHead.CreateUser        = Magic.Security.SecuritySession.CurrentUser.UserId;
                 poHead.CreateTime        = DateTime.Now;
                 poHead.ApproveResult     = ApproveStatus.UnApprove;
                 poHead.ApproveTime       = new DateTime(1900, 1, 1);
                 poHead.ApproveUser       = 0;
                 poHead.ApproveNote       = " ";
                 poHead.CurrentLineNumber = "0000";
                 poHead.Note              = this.txtNote.Text.Trim();
                 poHead.DefaultPlanDate   = Cast.DateTime(this.txtDemandDate.Text, DateTime.Now);
                 poHead.Create(session);
                 WebUtil.ShowMsg(this, "采购订单保存成功", "操作成功");
                 return(poHead);
             }
             else
             {
                 //编辑
                 poHead = POHead.Retrieve(session, this.txtOrderNumber.Text.Trim());
                 poHead.LocationCode    = this.drpLocationCode.SelectedValue;
                 poHead.PurchGroupCode  = this.drpPurchGroupCode.SelectedValue;
                 poHead.VendorID        = Cast.Int(this.drpVendorID.SelectedValue, 0);
                 poHead.ShippingAddress = this.txtShippingAddress.Text.Trim();
                 poHead.Note            = this.txtNote.Text.Trim();
                 poHead.DefaultPlanDate = Cast.DateTime(this.txtDemandDate.Text, poHead.DefaultPlanDate);
                 poHead.Update(session, "PurchGroupCode", "LocationCode", "VendorID", "ShippingAddress", "Note", "DefaultPlanDate");
                 WebUtil.ShowMsg(this, "采购订单保存成功", "操作成功");
                 return(poHead);
             }
         }
         catch (Exception ex)
         {
             //throw;
             logger.Info("保存POHead", ex);
             WebUtil.ShowMsg(this, "发生未处理的异常,请刷新页面重新操作,或者联系系统管理员");
         }
         return(null);
     }
 }
    void QueryAndBindData(ISession session)
    {
        string OrderNumber = WebUtil.Param("OrderNum");
        string LineNumber  = WebUtil.Param("CurrentLineNumber");

        if (!string.IsNullOrEmpty(OrderNumber) && !string.IsNullOrEmpty(LineNumber))
        {
            //显示POHead内容
            POHead poHead = POHead.Retrieve(session, OrderNumber);
            if (poHead != null)
            {
                this.LabOrderNumber.Text = poHead.OrderNumber;

                this.LabTaxAmt.Text          = poHead.TaxAmt.ToString();
                this.LabTaxExclusiveAmt.Text = poHead.TaxExclusiveAmt.ToString();
                this.LabTaxInclusiveAmt.Text = poHead.TaxInclusiveAmt.ToString();
                //供应商
                Vendor vendor = Vendor.Retrieve(session, poHead.VendorID);
                if (vendor != null)
                {
                    this.LabVendorID.Text = vendor.FullName;
                }
                //采购组
                PurchaseGroup purchasegroup = PurchaseGroup.Retrieve(session, poHead.PurchGroupCode);
                if (purchasegroup != null)
                {
                    this.LabPurchGroupCode.Text = purchasegroup.PurchGroupText;
                }
            }
            //POLine.SKUID=ItemSpec.SKUID  ItemSpec.ItemID=ItemMaster.ItemID
            //货号ItemMaster.ItemCode  商品名称ItemMaster.ItemName
            //颜色ItemSpec.ColorCode  尺码  ItemSpec.SizeCode
            this.magicPagerSub.PageSize = 20;
            int         pageIndex = this.magicPagerMain.CurrentPageIndex;
            int         pageSize  = this.magicPagerMain.PageSize;
            ObjectQuery query     = session.CreateObjectQuery(@"select m.ItemCode as ItemCode,m.ItemName as ItemName,s.ColorCode as ColorCode,s.SizeCode as SizeCode,p.LineStatus as LineStatus,p.PurchaseQty as PurchaseQty,p.PlanDate as PlanDate,p.Price as Price,p.TaxInclusiveAmt as TaxInclusiveAmt,p.TaxValue as TaxValue,p.TaxAmt as TaxAmt,p.LineNumber as LineNumber,p.OrderNumber as OrderNumber from POLine p,ItemSpec s,ItemMaster m WHERE p.SKUID=s.SKUID AND s.ItemID=m.ItemID AND p.OrderNumber=?").Attach(typeof(POLine)).Attach(typeof(ItemSpec)).Attach(typeof(ItemMaster)).SetValue(0, OrderNumber, "p.OrderNumber").SetPage(pageIndex, pageSize);
            this.rptPL.DataSource = query.DataSet();
            this.rptPL.DataBind();

            this.magicPagerMain.RecordCount = this.magicPagerSub.RecordCount = query.Count();
            WebUtil.SetMagicPager(magicPagerMain, pageSize, pageIndex);
            WebUtil.SetMagicPager(magicPagerSub, pageSize, pageIndex);
        }
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            this.hidStatus.Value     = POStatus.New.ToString();
            this.txtOrderNumber.Text = WebUtil.Param("OrderNum");
            this.lblPaid.Text        = "否";
            POHead po = null;
            using (_session = new Session())
            {
                InitDrp(_session);
                _actionMode             = WebUtil.GetActionMode(this);
                this.txtDemandDate.Text = DateTime.Now.ToString("yyyy-MM-dd");

                if (_actionMode == Mode.Edit)
                {
                    po = POHead.Retrieve(_session, this.OrderNumber);
                    RetrievePOHeadData(po, this.OrderNumber);
                }
            }
            this.SetView(po);
        }
    }
 protected void Page_Load(object sender, EventArgs e)
 {
     if (Request["return"] != null)
     {
         this.cmdReturn1["Return"].NavigateUrl = this.cmdReturn2["Return"].NavigateUrl = Request["return"];
     }
     if (!IsPostBack)
     {
         using (_session = new Session())
         {
             POHead head = POHead.Retrieve(_session, this.OrderNumber);
             if (head != null)
             {
                 BindPOLine(_session, head);
             }
             this.SetView(_session, head);
             if (head.Status == POStatus.New)
             {
                 this.SetQuickAdd(_session, head);
             }
         }
     }
 }
Exemple #6
0
        internal static IApprovable GetApproveItem(ISession session, string orderType, string orderNumber)
        {
            switch (orderType)
            {
            case POHead.ORDER_TYPE:     //采购订单
                return(POHead.Retrieve(session, orderNumber));

            case RCVHead.ORD_TYPE_PUR:           //采购收货
                return(RCVHead.Retrieve(session, orderNumber));

            case POReturnHead.ORD_TYPE_CODE:     //采购退货
                return(POReturnHead.Retrieve(session, orderNumber));

            case ICHead.ORDER_TYPE:     //交接单
                return(ICHead.Retrieve(session, orderNumber));

            case INVCheckHead.ORDER_TYPE_ADJ:     //库存调整单
            case INVCheckHead.ORDER_TYPE_CHK:     //库房盘点
                return(INVCheckHead.Retrieve(session, orderNumber));

            case StockInHead.ORD_TYPE_ASSIST_IN:         //辅料入库
            case StockInHead.ORD_TYPE_ASSIST_OUT:        //辅料领用
            case StockInHead.ORD_TYPE_PRD_IN:            //产品入库
            case StockInHead.ORD_TYPE_PRD_OUT:           //产品领用
                return(StockInHead.Retrieve(session, orderNumber));

            case ReturnHead.ORDER_TYPE_MBR_RTN:       //会员退货
            case ReturnHead.ORDER_TYPE_LOGISTICS_RTN: //物流退货
            case ReturnHead.ORDER_TYPE_INNER_RTN:     //内部退货
            case ReturnHead.ORDER_TYPE_EXCHANGE_RTN:  //会员换货
                return(ReturnHead.Retrieve(session, orderNumber));

            case WHTransferHead.ORDER_TYPE_NORMAL:     //移库单
                return(WHTransferHead.Retrieve(session, orderNumber));
            }
            throw new Exception(string.Format("Order type {0} is not a registered approvable item", orderType));
        }
 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
     }
 }
Exemple #8
0
    private void QueryAndBindData(ISession session, int pageIndex, int pageSize, bool fetchRecordCount)
    {
        ObjectQuery query = session.CreateObjectQuery(@"
select ai.ApproveID as ApproveID,ai.OrderTypeCode as OrderTypeCode,td.TypeText as TypeText,ai.OrderNumber as OrderNumber
    ,ai.Status as Status,ai.ApproveTime as ApproveTime
    ,u1.FullName as SubmitUser,u2.FullName as CreateUser,ai.SubmitTime as SubmitTime,ai.CreateTime as CreateTime
    ,ar.HasFinished as HasFinished,ar.ActiveItem as ActiveItem, td.ViewURL as ViewURL
    ,ar.ApproveResultID as ApproveResultID, ' ' as Vendor
from OrderApproveItem ai 
inner join OrderApproveResult ar on ai.ApproveID=ar.ApproveID
inner join OrderTypeDef td on td.OrderTypeCode=ai.OrderTypeCode
left join User u1 on u1.UserId=ai.SubmitUser
left join User u2 on u2.UserId=ai.CreateUser
where ar.ApproveUser=?userId")
                            .Attach(typeof(OrderApproveItem)).Attach(typeof(OrderApproveResult)).Attach(typeof(OrderTypeDef))
                            .Attach(typeof(Magic.Sys.User))
                            .SetValue("?userId", Magic.Security.SecuritySession.CurrentUser.UserId, "ar.ApproveUser")
                            .SetPage(pageIndex, pageSize);

        if (this.drpOrderType.SelectedValue.Trim().Length > 0)
        {
            query.And(Exp.Eq("ai.OrderTypeCode", this.drpOrderType.SelectedValue.Trim()));
        }
        if (this.txtOrderNumber.Text.Trim().Length > 0)
        {
            query.And(Exp.Like("ai.OrderNumber", "%" + this.txtOrderNumber.Text.Trim() + "%"));
        }
        if (this.rdoUnapprove.Checked)
        {
            query.And(Exp.Eq("ar.ActiveItem", true)).OrderBy("ai.SubmitTime", Order.Desc);
        }
        else
        {
            query.And(Exp.Eq("ar.HasFinished", true)).OrderBy("ai.ApproveTime", Order.Desc);
            DateTime dateFrom = Cast.DateTime(this.txtDateFrom.Text.Trim(), new DateTime(1900, 1, 1));
            DateTime dateTo   = Cast.DateTime(this.txtDateTo.Text.Trim(), new DateTime(1900, 1, 1)).AddDays(1);
            if (dateFrom > new DateTime(1900, 1, 1))
            {
                query.And(Exp.Ge("ai.ApproveTime", dateFrom));
            }
            if (dateTo > new DateTime(1900, 1, 1))
            {
                query.And(Exp.Le("ai.ApproveTime", dateTo));
            }
        }

        DataSet ds = query.DataSet();

        foreach (DataRow row in ds.Tables[0].Rows)
        {
            string ordType = Cast.String(row["OrderTypeCode"]);
            if (ordType == POHead.ORDER_TYPE)
            {
                string poNum = Cast.String(row["OrderNumber"]);
                POHead po    = POHead.Retrieve(session, poNum);
                if (po != null && po.VendorID > 0)
                {
                    Vendor vendor = Vendor.Retrieve(session, po.VendorID);
                    if (vendor != null)
                    {
                        row["Vendor"] = vendor.ShortName;
                    }
                }
            }
        }
        this.repeatControl.DataSource = ds;
        this.repeatControl.DataBind();
        if (fetchRecordCount)
        {
            this.magicPagerMain.RecordCount = this.magicPagerSub.RecordCount = query.Count();
        }
        WebUtil.SetMagicPager(magicPagerMain, pageSize, pageIndex);
        WebUtil.SetMagicPager(magicPagerSub, pageSize, pageIndex);
    }
    protected void cmdProduct_Click(object sender, EventArgs e)
    {
        if (this.txtSkuId.Value.Trim().Length <= 0)
        {
            return;
        }

        bool added = false;

        using (_session = new Session())
        {
            string[] idArray = this.txtSkuId.Value.Trim().Trim(';').Split(';');
            try
            {
                POHead head = POHead.Retrieve(_session, this.OrderNumber);
                if (head == null || head.Status != POStatus.New)
                {
                    return;
                }

                _session.BeginTransaction();
                foreach (string s in idArray)
                {
                    POLine poLine = new POLine();
                    poLine.OrderNumber = this.OrderNumber;
                    poLine.SKUID       = Cast.Int(s, 0);
                    if (poLine.SKUID <= 0)
                    {
                        continue;
                    }
                    poLine.LineNumber  = head.NextLineNumber();
                    poLine.LineStatus  = POLineStatus.Open;
                    poLine.PurchaseQty = 0M;
                    poLine.Price       = 0M;
                    //Vendor vendor = null;
                    //if (head.VendorID > 0) vendor = Vendor.Retrieve(_session, head.VendorID);
                    //if (vendor != null)
                    //{
                    //    poLine.TaxID = vendor.TaxID;
                    //    poLine.TaxValue = vendor.Tax;
                    //}
                    //else
                    //{
                    //    poLine.TaxID = 0;
                    //    poLine.TaxValue = 0M;
                    //}
                    poLine.TaxID                = 0;
                    poLine.TaxValue             = 0M;
                    poLine.TaxInclusiveAmt      = 0M;
                    poLine.TaxAmt               = 0M;
                    poLine.TaxExlusiveAmt       = 0M;
                    poLine.PlanDate             = head.DefaultPlanDate;
                    poLine.ActualDate           = new DateTime(1900, 1, 1);
                    poLine.ReceiveQty           = 0M;
                    poLine.IQCQty               = 0M;
                    poLine.UnfinishedReceiveQty = 0M;
                    poLine.ModifyUser           = SecuritySession.CurrentUser.UserId;
                    poLine.ModifyTime           = DateTime.Now;
                    poLine.UnitID               = 0;

                    poLine.Create(_session);
                    added = true;
                }
                head.Update(_session, "CurrentLineNumber");
                _session.Commit();
                if (added)
                {
                    BindPOLine(_session, head);
                    WebUtil.ShowMsg(this, "订单明细保存成功", "操作成功");
                }
            }
            catch (Exception ex)
            {
                _session.Rollback();
                logger.Info("保存POLine", ex);
                WebUtil.ShowError(this, "发生未处理的异常,请刷新页面重新操作,或者联系系统管理员");
            }
        }
    }
    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
        }
    }