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 @@
+
+
+
+