From 69f63b248f033dc3ff2107d86b257b7a19812b46 Mon Sep 17 00:00:00 2001 From: luanhui <1029149336@@qq.com> Date: Sat, 24 Feb 2018 11:02:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8C=89=E7=BA=BF=E8=B7=AF=E8=A3=85=E8=BD=A6?= =?UTF-8?q?=20=E9=9C=80=E6=B1=82=E5=8D=95No.138520?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- B3QingDaoWanFu.Web/B3QingDaoWanFu.Web.csproj | 6 + .../Tools/CarLoadingBySendLinePage.cs | 307 ++++++++++++++++++ .../B3QingDaoWanFu/Tools/SaleOutstoreInfo.cs | 164 ++++++++++ B3QingDaoWanFu.Web/PluginClass.cs | 1 + .../config/plugins/B3QingDaoWanFu.plugin | 4 + 5 files changed, 482 insertions(+) create mode 100644 B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Tools/CarLoadingBySendLinePage.cs create mode 100644 B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Tools/SaleOutstoreInfo.cs diff --git a/B3QingDaoWanFu.Web/B3QingDaoWanFu.Web.csproj b/B3QingDaoWanFu.Web/B3QingDaoWanFu.Web.csproj index 4086503..92ba51f 100644 --- a/B3QingDaoWanFu.Web/B3QingDaoWanFu.Web.csproj +++ b/B3QingDaoWanFu.Web/B3QingDaoWanFu.Web.csproj @@ -156,6 +156,12 @@ ASPXCodeBehind + + ASPXCodeBehind + + + ASPXCodeBehind + diff --git a/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Tools/CarLoadingBySendLinePage.cs b/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Tools/CarLoadingBySendLinePage.cs new file mode 100644 index 0000000..1824618 --- /dev/null +++ b/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Tools/CarLoadingBySendLinePage.cs @@ -0,0 +1,307 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Web.UI.HtmlControls; +using System.Web.UI.WebControls; +using BWP.B3Frameworks.BO; +using BWP.B3Frameworks.BO.NamedValueTemplate; +using BWP.B3Frameworks.Utils; +using BWP.B3Sale.BL; +using BWP.B3Sale.BO; +using BWP.B3Sale.Utils; +using BWP.Web.Pages.B3Sale.Bills.SaleOutStore_; +using BWP.Web.Utils; +using BWP.Web.WebControls; +using Forks.EnterpriseServices.BusinessInterfaces; +using Forks.EnterpriseServices.DataForm; +using Forks.EnterpriseServices.DomainObjects2; +using Forks.EnterpriseServices.DomainObjects2.DQuery; +using Forks.EnterpriseServices.SqlDoms; +using Forks.Utils; +using Forks.Utils.Collections; +using TSingSoft.WebControls2; +using TSingSoft.WebPluginFramework; +using TSingSoft.WebPluginFramework.Controls; + +namespace BWP.Web.Pages.B3QingDaoWanFu.Tools +{ + class CarLoadingBySendLinePage:AppBasePage + { + + private readonly DFInfo _dFInfo = DFInfo.Get(typeof(SaleOutStore)); + private DFBrowseGrid _slGrid; + private QueryContainer _slQueryContainer; + private CheckBox _slChbHidden; + protected override void InitForm(HtmlForm form) + { + _slQueryContainer = QueryContainer.FromResource(typeof(SaleOutStoreList).FullName + ".xml", typeof(SaleOutStoreList).Assembly); + + form.Controls.Add(new PageTitle("按线路派车")); + var vPanel = new VLayoutPanel(); + form.Controls.Add(vPanel); + + AddSearchConditions(vPanel); + AddSendLineGrid(vPanel); + + } + private void AddSearchConditions(VLayoutPanel vPanel) + { + var tablePanel = new TableLayoutPanel(2, 1); + vPanel.Add(tablePanel); + var row = 0; + const int width = 4; + tablePanel.Add(0, 1, row, row + 1, new DFLabel(_dFInfo.Fields["LoadTime"], width)); + tablePanel.Add(1, 2, row, ++row, QueryCreator.TimeRange(_dFInfo.Fields["LoadTime"], _slQueryContainer, "MinLoadTime", "MaxLoadTime", BLContext.Today, BLContext.Today.AddDays(1).AddMinutes(-1))); + + var hPanel = new HLayoutPanel(); + + var btnSearch = new TSButton("开始查询", (sender, e) => + { + _slGrid.Query = GetSendLineQuery(_slQueryContainer.Build(), _slChbHidden.Checked); + _slGrid.DataBind(); + }); + + _slChbHidden = new CheckBox + { + Checked = true, + Text = "隐藏已派完路线" + }; + hPanel.Add(btnSearch); + hPanel.Add(new RedirectTSButton("清除条件")); + hPanel.Add(_slChbHidden); + vPanel.Add(hPanel); + } + private void AddSendLineGrid(VLayoutPanel vPanel) + { + _slGrid = new DFBrowseGrid(new DFDataTableEditor()) + { + Width = Unit.Percentage(100), + IgnoreItemsCount = true + }; + CreateSendLineGridColumns(); + var hPanel = new HLayoutPanel(); + vPanel.Add(hPanel, new VLayoutOption(HorizontalAlign.Left)); + vPanel.Add(_slGrid); + } + + Dictionary> ThisTimeLoadBills + { + get + { + if (ViewState["ThisTimeLoadBills"] == null) + ViewState["ThisTimeLoadBills"] = new Dictionary>(); + return (Dictionary>)ViewState["ThisTimeLoadBills"]; + } + set { ViewState["ThisTimeLoadBills"] = value; } + } + + private void CreateSendLineGridColumns() + { + _slGrid.Columns.Add(new DFBrowseGridColumn("路线")); + _slGrid.Columns.Add(new DFBrowseGridColumn("辅数量")); +// _slGrid.Columns.Add(new DFBrowseGridColumn("AllUnitNum")); + var allUnitNumcol = new DFBrowseGridCustomExtColumn((row, cell, rowIndex) => + { + var allUnitNum = _slGrid.CurrentData.Data.Rows[rowIndex]["AllUnitNum"]; + var name = (string)_slGrid.CurrentData.Data.Rows[rowIndex]["路线"]; + var id = (long)_slGrid.CurrentData.Data.Rows[rowIndex]["路线ID"]; + var text = allUnitNum.ToString(); + + var link = new DialogButton(); + link.Text = text; + var min = (DateTime?)_slQueryContainer.GetInput("MinLoadTime"); + var max = (DateTime?)_slQueryContainer.GetInput("MaxLoadTime"); + link.Url = UrlUtility.AppendParam(UrlUtility.AppendParam( + "SaleOutstoreInfo.aspx", "sendlineID", id.ToString()), + "time", string.Format("{0}|{1}", min, max)); + link.Click += delegate + { + _slGrid.GetFromUI(); + var bills = DialogUtil.GetCachedObj(this); + + var allnum = bills.LastOrDefault(); + if (!string.IsNullOrEmpty(allnum)) + { + _slGrid.DataFilter = dt => { dt.Rows[rowIndex]["本次派车数量"] = decimal.Parse(allnum); }; + } + if (bills.Count > 1) + { + bills.RemoveAt(bills.Count - 1); + if (ThisTimeLoadBills.ContainsKey(name)) + ThisTimeLoadBills[name] = bills.ToList(); + else + { + ThisTimeLoadBills.Add(name, bills.ToList()); + } + } + _slGrid.DataBind(); + }; + cell.Controls.Add(link); + cell.Align = "right"; + }) + { HeaderText = "报价数量" }; + _slGrid.Columns.EAdd(allUnitNumcol); + + _slGrid.Columns.Add(new DFBrowseGridColumn("已派车数量")); + var thisTimeLoadNum = new DFBrowseGridCustomExtColumn((row, cell, rowIndex) => + { + var x = new Label(); + var num = _slGrid.CurrentData.Data.Rows[rowIndex]["本次派车数量"]; + if (num != null) + x.Text = num.ToString(); + cell.Controls.Add(x); + cell.Align = "right"; + }) + { HeaderText = "本次派车数量" }; + _slGrid.Columns.Add(thisTimeLoadNum); + var staffColumn = new DFEditGridColumn("业务员ID"); + staffColumn.InitEditControl += (sender, e) => + { + e.Control.Width = Unit.Pixel(130); + e.Control.DataKind = "员工"; + e.Control.EnableInputArgument = true; + e.Control.DFDisplayField = "业务员"; + }; + var carColumn = new DFEditGridColumn("车辆ID"); + carColumn.InitEditControl += (sender, e) => + { + e.Control.Width = Unit.Pixel(130); + e.Control.DataKind = B3SaleDataSources.车辆; + e.Control.EnableInputArgument = true; + e.Control.DFDisplayField = "车辆"; + }; + + var staff2Column = new DFEditGridColumn("送货人员ID"); + staff2Column.InitEditControl += (sender, e) => + { + e.Control.Width = Unit.Pixel(130); + e.Control.DataKind = "员工"; + e.Control.EnableInputArgument = true; + e.Control.DFDisplayField = "送货人员"; + }; + + var remarkColumn = new DFEditGridColumn("Remark"); + remarkColumn.InitEditControl += (sender, e) => + { + e.Control.Width = Unit.Pixel(130); + }; + + _slGrid.Columns.EAdd(carColumn).HeaderText = "运输车辆"; + _slGrid.Columns.EAdd(staffColumn).HeaderText = "业务员"; + _slGrid.Columns.EAdd(staff2Column).HeaderText = "送货人员"; + _slGrid.Columns.EAdd(remarkColumn).HeaderText = "摘要"; + _slGrid.Columns.EAdd(new DFBrowseGridCustomExtColumn((row, cell, rowIndex) => + { + var lbtn = new LinkButton + { + Text = "派车", + Width = Unit.Pixel(60) + }; + lbtn.Font.Underline = false; + lbtn.Command += (sender, e) => + { + _slGrid.GetFromUI(); + if ((((decimal?)row["本次派车数量"]) ?? 0) == 0) + throw new ApplicationException("请确认本次派车数量"); + if (row["车辆ID"] == null) + throw new ApplicationException("请选择车辆"); + var name = (string)_slGrid.CurrentData.Data.Rows[rowIndex]["路线"]; + var bl = BIFactory.Create(); + if (ThisTimeLoadBills.ContainsKey(name)) + { + var list = ThisTimeLoadBills[name].Select(long.Parse); + var carID = (long)row["车辆ID"]; + string msg; + var carLoading = bl.LoadTodayNoChecked(carID); + if (carLoading == null) + { + var parameters = new CarLoadingParameters(); + parameters.CarID = carID; + parameters.SendLineID = (long)row["路线ID"]; + parameters.StaffID = (long?)row["业务员ID"]; + parameters.StaffID2 = (long?)row["送货人员ID"]; + parameters.Remark = (string)row["Remark"]; + var id = bl.InsertFromSaleOutStore(list, parameters); + msg = "生成装车单No." + id; + } + else + { + bl.UpdateFromSaleOutStore(list, carLoading); + msg = "更新装车单No." + carLoading.ID; + } + + _slGrid.DataBind(); + AspUtil.Alert(this, msg); + +// _carLoadingGrid.DataBind(); + } + else + { + AspUtil.Alert(this, "没有数据"); + } + }; + cell.Controls.Add(lbtn); + cell.Align = "center"; + })).HeaderText = "派车"; + } + + + private class AreadyLoadBill + { + public long SaleOutStore_ID { get; set; } + } + public static DQueryDom GetSendLineQuery(DQueryDom dom, bool hidden) + { + var areadyLoadBill = new JoinAlias("AreadyLoadBill", typeof(AreadyLoadBill)); + var sendLine = new JoinAlias("SendLine", typeof(DeliverGoodsLine)); + var sendLineDetail = new JoinAlias(typeof(DeliverGoodsLine_Detail)); + dom.From.AddJoin(JoinType.Left, new DQDmoSource(sendLineDetail), DQCondition.EQ(sendLineDetail, "Customer_ID", dom.From.RootSource.Alias, "Customer_ID")); + dom.From.AddJoin(JoinType.Left, new DQDmoSource(sendLine), DQCondition.EQ(sendLineDetail, "DeliverGoodsLine_ID", sendLine, "ID")); + dom.RegisterQueryTable(typeof(AreadyLoadBill), new List { "SaleOutStore_ID" }, GetTemDom()); + dom.From.AddJoin(JoinType.Left, new DQDmoSource(areadyLoadBill), DQCondition.EQ(areadyLoadBill, "SaleOutStore_ID", dom.From.RootSource.Alias, "ID")); + + dom.Columns.Clear(); + dom.Columns.Add(DQSelectColumn.Create(DQExpression.Field(sendLine, "ID"), "路线ID")); + dom.Columns.Add(DQSelectColumn.Create(DQExpression.Field(sendLine, "Name"), "路线")); + dom.GroupBy.Expressions.Add(DQExpression.Field(sendLine, "ID")); + dom.GroupBy.Expressions.Add(DQExpression.Field(sendLine, "Name")); + dom.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.Field("AllUnitNum")), "AllUnitNum")); + dom.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.Field("SecondNumber")), "辅数量")); + dom.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.GreaterThan(DQExpression.Field(areadyLoadBill, "SaleOutStore_ID"), DQExpression.Snippet("0")), DQExpression.Field("AllUnitNum"), DQExpression.NULL)), "已派车数量")); + dom.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet?>("null"), "本次派车数量")); + dom.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet("null"), "业务员ID")); + + dom.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet("''"), "业务员")); + dom.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet("null"), "送货人员ID")); + dom.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet("''"), "送货人员")); + dom.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet("null"), "车辆ID")); + dom.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet("''"), "车辆")); + dom.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet("''"), "Remark")); + dom.Where.Conditions.Add(DQCondition.EQ("BillState", 单据状态.未审核)); + dom.Where.Conditions.Add(DQCondition.EQ("TakeGoods_Type", 配送方式.公司配送)); + dom.Where.Conditions.Add(DQCondition.GreaterThan(DQExpression.IfNull(DQExpression.Field(sendLine, "ID"), DQExpression.Snippet("0")), DQExpression.Snippet("0"))); + dom.Where.Conditions.Add(DQCondition.Or( + DQCondition.InEQ(DQExpression.Field("AllUnitNum"), DQExpression.Snippet?>("0")), + DQCondition.InEQ(DQExpression.Field("SecondNumber"), DQExpression.Snippet?>("0")))); + if (hidden) + { + dom.Having.Conditions.Add(DQCondition.InEQ(DQExpression.Count(DQExpression.Field("ID")), DQExpression.Count(DQExpression.Field(areadyLoadBill, "SaleOutStore_ID")))); + } + + OrganizationUtil.AddOrganizationLimit(dom,typeof(SaleOutStore)); + return dom; + } + + private static DQueryDom GetTemDom() + { + var carLoadingBillDetail = new JoinAlias(typeof(CarLoading_BillDetail)); + var temDom = new DQueryDom(carLoadingBillDetail); + temDom.Columns.Add(DQSelectColumn.Field("BillID", "SaleOutStore_ID")); + temDom.Distinct = true; + temDom.Where.Conditions.Add(DQCondition.EQ(carLoadingBillDetail, "BillTypeID", DmoTypeIDAttribute.GetID(typeof(SaleOutStore)))); + return temDom; + } + + } +} diff --git a/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Tools/SaleOutstoreInfo.cs b/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Tools/SaleOutstoreInfo.cs new file mode 100644 index 0000000..228adfb --- /dev/null +++ b/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Tools/SaleOutstoreInfo.cs @@ -0,0 +1,164 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Web.UI.HtmlControls; +using System.Web.UI.WebControls; +using BWP.B3Frameworks.Utils; +using BWP.B3Sale.BO; +using BWP.Web.Utils; +using Forks.EnterpriseServices.DataForm; +using Forks.EnterpriseServices.DomainObjects2; +using Forks.EnterpriseServices.DomainObjects2.DQuery; +using Forks.EnterpriseServices.SqlDoms; +using Forks.Utils; +using TSingSoft.WebControls2; +using TSingSoft.WebPluginFramework.Controls; + +namespace BWP.Web.Pages.B3QingDaoWanFu.Tools +{ + class SaleOutstoreInfo: AppBasePage + { + + private DFBrowseGrid _billGrid; + + long SendLineID + { + get + { + return long.Parse(Request.QueryString["sendlineID"]); + } + } + + DateTime? MinTime + { + get + { + var strs = Request.QueryString["time"].Split('|'); + if (string.IsNullOrEmpty(strs[0])) + return null; + return DateTime.Parse(strs[0]); + } + } + + DateTime? MaxTime + { + get + { + var strs = Request.QueryString["time"].Split('|'); + if (string.IsNullOrEmpty(strs[1])) + return null; + return DateTime.Parse(strs[1]); + } + } + + protected override void InitForm(HtmlForm form) + { +// _pageView = new ClientPageView +// { +// TabPosition = TabPosition.Top +// }; +// _pageView.Tabs.Add(CreateFirstTab()); +// _pageView.Tabs.Add(CreateSecondTab()); +// _pageView.Tabs.Add(CreateThirdTab()); +// form.Controls.Add(_pageView); + form.Controls.Add(new PageTitle("单据列表")); + + var vPanel = new VLayoutPanel(); + form.Controls.Add(vPanel); + + _billGrid = new DFBrowseGrid(new DFDataTableEditor()) + { + Width = Unit.Percentage(100), + IgnoreItemsCount = true, + MultiSelectionEnabled = true + }; + _billGrid.PagerCreating += GridPagerCreating; + _billGrid.MultiSelection += GridMultiSelection; + CreateSendLineGridColumns(); + var hPanel = new HLayoutPanel(); + vPanel.Add(hPanel, new VLayoutOption(HorizontalAlign.Right)); + vPanel.Add(_billGrid); + + } + + private void CreateSendLineGridColumns() + { + _billGrid.Add(new DFBrowseGridColumn("ID")); + _billGrid.Add(new DFBrowseGridColumn("LoadTime")); + _billGrid.Add(new DFBrowseGridColumn("Customer_Name")); + _billGrid.Add(new DFBrowseGridColumn("AllUnitNum") { SumMode = SumMode.Sum }); + _billGrid.Add(new DFBrowseGridColumn("SecondNumber") { SumMode = SumMode.Sum }); + } + + void GridPagerCreating(object sender, DFGridPagerCreatingEventArgs e) + { + var button = new TSButton("选中"); + e.Pager.Controls.Add(button); + button.Click += GridMultiSelection; + var allSelect = new TSButton("全部选中"); + e.Pager.Controls.Add(allSelect); + allSelect.Click += (sender1, e1) => { + var query = _billGrid.LastQuery.DQuery; + query.Range = SelectRange.All; + var table = new DFDataAdapter(new LoadArguments(query)).Fill(); + + IList selectedList = new List(); + Money? allnum = null; + foreach (var row in table.Rows) + { + selectedList.Add(row["ID"].ToString()); + allnum = (allnum ?? 0) + (Money)row["AllUnitNum"]; + } + selectedList.Add(allnum == null ? string.Empty : allnum.ToString()); + ReturnList(selectedList); + }; + } + + void GridMultiSelection(object sender, EventArgs e) + { + IList selectedList = new List(); + Money? allnum = null; + foreach (DFDataRow row in _billGrid.GetSelectedItems()) + { + selectedList.Add(row["ID"].ToString()); + allnum = (allnum ?? 0) + (Money)row["AllUnitNum"]; + } + selectedList.Add(allnum == null ? string.Empty : allnum.ToString()); + ReturnList(selectedList); + } + private void ReturnList(IList selectedList) + { + DialogUtil.SetCachedObj(this, selectedList); + } + protected override void OnLoad(EventArgs e) + { + base.OnLoad(e); + if (!IsPostBack) + { + _billGrid.Query = GetQuery(); + _billGrid.DataBind(); + } + } + DQueryDom GetQuery() + { + var dom = new DQueryDom(new JoinAlias(typeof(SaleOutStore))); + dom = CarLoadingBySendLinePage.GetSendLineQuery(dom, false); + dom.Columns.Clear(); + dom.GroupBy.Expressions.Clear(); + dom.Having.Conditions.Clear(); + if (MinTime != null) + dom.Where.Conditions.Add(DQCondition.GreaterThanOrEqual("LoadTime", MinTime)); + if (MaxTime != null) + dom.Where.Conditions.Add(DQCondition.LessThanOrEqual("LoadTime", MaxTime)); + dom.Where.Conditions.Add(DQExpression.Snippet("[SendLine].[ID]=" + SendLineID)); + dom.Where.Conditions.Add(DQExpression.Snippet("ISNULL([AreadyLoadBill].[SaleOutStore_ID], 0)=0")); + dom.Columns.Add(DQSelectColumn.Field("ID")); + dom.Columns.Add(DQSelectColumn.Field("LoadTime")); + dom.Columns.Add(DQSelectColumn.Field("Customer_Name")); + dom.Columns.Add(DQSelectColumn.Field("AllUnitNum")); + dom.Columns.Add(DQSelectColumn.Field("SecondNumber")); + return dom; + } + } +} diff --git a/B3QingDaoWanFu.Web/PluginClass.cs b/B3QingDaoWanFu.Web/PluginClass.cs index 27b1086..dc0cc79 100644 --- a/B3QingDaoWanFu.Web/PluginClass.cs +++ b/B3QingDaoWanFu.Web/PluginClass.cs @@ -22,6 +22,7 @@ namespace BWP.B3QingDaoWanFu WpfPageFactory.RegisterPageOverlay(typeof(SaleOutStoreEdit).FullName, typeof(SaleOutStoreEdit_Ext).FullName); GlobalFlags.On(B3ButcherManageConsts.GlobalFlags.StatPayAddRewardWithButcherUseWeight); GlobalFlags.On(B3SaleConsts.Flags.MarketingActivityEnableAdjustPrice); + GlobalFlags.On(B3SaleConsts.Flags.SendOutStoreNoAvailableStorage); } } } diff --git a/WebFolder/config/plugins/B3QingDaoWanFu.plugin b/WebFolder/config/plugins/B3QingDaoWanFu.plugin index f2b5e13..efd12c2 100644 --- a/WebFolder/config/plugins/B3QingDaoWanFu.plugin +++ b/WebFolder/config/plugins/B3QingDaoWanFu.plugin @@ -24,10 +24,14 @@ + + + +