|
|
@ -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<string, List<string>> ThisTimeLoadBills |
|
|
|
|
|
{ |
|
|
|
|
|
get |
|
|
|
|
|
{ |
|
|
|
|
|
if (ViewState["ThisTimeLoadBills"] == null) |
|
|
|
|
|
ViewState["ThisTimeLoadBills"] = new Dictionary<string, List<string>>(); |
|
|
|
|
|
return (Dictionary<string, List<string>>)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<string>(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<DFChoiceBox>("业务员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<DFChoiceBox>("车辆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<DFChoiceBox>("送货人员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<DFTextBox>("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<ICarLoadingBL>(); |
|
|
|
|
|
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<string> { "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<long>("0")), DQExpression.Field("AllUnitNum"), DQExpression.NULL)), "已派车数量")); |
|
|
|
|
|
dom.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet<Money<decimal>?>("null"), "本次派车数量")); |
|
|
|
|
|
dom.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet<long?>("null"), "业务员ID")); |
|
|
|
|
|
|
|
|
|
|
|
dom.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet<string>("''"), "业务员")); |
|
|
|
|
|
dom.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet<long?>("null"), "送货人员ID")); |
|
|
|
|
|
dom.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet<string>("''"), "送货人员")); |
|
|
|
|
|
dom.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet<long?>("null"), "车辆ID")); |
|
|
|
|
|
dom.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet<string>("''"), "车辆")); |
|
|
|
|
|
dom.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet<string>("''"), "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<long>("0")), DQExpression.Snippet<long>("0"))); |
|
|
|
|
|
dom.Where.Conditions.Add(DQCondition.Or( |
|
|
|
|
|
DQCondition.InEQ(DQExpression.Field("AllUnitNum"), DQExpression.Snippet<Money<decimal>?>("0")), |
|
|
|
|
|
DQCondition.InEQ(DQExpression.Field("SecondNumber"), DQExpression.Snippet<Money<decimal>?>("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; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
} |