东方万旗模块
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

401 lines
15 KiB

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using BWP.B3Frameworks.BO.MoneyTemplate;
using BWP.B3Frameworks.BO.NamedValueTemplate;
using BWP.B3Frameworks.Utils;
using BWP.B3Sale.BL;
using BWP.B3Sale.BO;
using BWP.B3UnitedInfos.BO;
using BWP.Web.Utils;
using Forks.EnterpriseServices;
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.Controls;
using TSingSoft.WebPluginFramework.Pages;
namespace BWP.Web.Pages.B3_DongFangWanQi.Tools {
class SaleOrderUpdateEdit : AppBasePage {
long? GoodsProperty_ID {
get {
if (string.IsNullOrEmpty(Request.QueryString["GoodsProperty_ID"]))
return null;
return long.Parse(Request.QueryString["GoodsProperty_ID"]);
}
}
string Goods_Name {
get {
return Request.QueryString["Goods_Name"];
}
}
long? Customer_ID {
get {
if (string.IsNullOrEmpty(Request.QueryString["Customer_ID"]))
return null;
return long.Parse(Request.QueryString["Customer_ID"]);
}
}
string AccountingUnit_Name {
get {
return Request.QueryString["AccountingUnit_Name"];
}
}
long? AccountingUnit_ID {
get {
if (string.IsNullOrEmpty(Request.QueryString["AccountingUnit_ID"]))
return null;
return long.Parse(Request.QueryString["AccountingUnit_ID"]);
}
}
long? SelectAccountingUnit_ID {
get {
if (string.IsNullOrEmpty(Request.QueryString["SelectAccountingUnit_ID"]))
return null;
return long.Parse(Request.QueryString["SelectAccountingUnit_ID"]);
}
}
long? SelectStore_ID {
get {
if (string.IsNullOrEmpty(Request.QueryString["SelectStore_ID"]))
return null;
return long.Parse(Request.QueryString["SelectStore_ID"]);
}
}
long? SelectCustomer_ID {
get {
if (string.IsNullOrEmpty(Request.QueryString["SelectCustomer_ID"]))
return null;
return long.Parse(Request.QueryString["SelectCustomer_ID"]);
}
}
string SelectGoodsProperty_Name {
get {
if (string.IsNullOrEmpty(Request.QueryString["SelectGoodsProperty_Name"]))
return null;
return Request.QueryString["SelectGoodsProperty_Name"];
}
}
long? SelectGoodsProperty_ID {
get {
if (string.IsNullOrEmpty(Request.QueryString["SelectGoodsProperty_ID"]))
return null;
return long.Parse(Request.QueryString["SelectGoodsProperty_ID"]);
}
}
string SelectGoodsPropertyCatalog_Name {
get {
if (string.IsNullOrEmpty(Request.QueryString["SelectGoodsPropertyCatalog_Name"]))
return null;
return Request.QueryString["SelectGoodsPropertyCatalog_Name"];
}
}
long? SelectGoodsPropertyCatalog_ID {
get {
if (string.IsNullOrEmpty(Request.QueryString["SelectGoodsPropertyCatalog_ID"]))
return null;
return long.Parse(Request.QueryString["SelectGoodsPropertyCatalog_ID"]);
}
}
List<Order_DetailExt> Details {
get {
if (ViewState["Details"] == null)
ViewState["Details"] = new List<Order_DetailExt>();
return (List<Order_DetailExt>)ViewState["Details"];
}
set { ViewState["Details"] = value; }
}
DateTime? MinTime {
get {
var str = Request.QueryString["MinDate"];
if (string.IsNullOrEmpty(str))
return null;
return DateTime.Parse(str);
}
}
DateTime? MaxTime {
get {
var str = Request.QueryString["MaxDate"];
if (string.IsNullOrEmpty(str))
return null;
return DateTime.Parse(str);
}
}
private DFEditGrid _goodsGrid;
private QueryContainer _queryContainer;
readonly static DFInfo DFInfo = DFInfo.Get(typeof(Order));
private Label _l1, _l2;
private DFContainer _dfContainer;
protected override void InitForm(HtmlForm form) {
_queryContainer = QueryContainer.FromResource(typeof(SaleOrderUpdateList).FullName + ".xml", GetType().Assembly);
QueryCreator.TimeRange(DFInfo.Fields["OrderDate"], _queryContainer, "MinOrderDate", "MaxOrderDate", MinTime, MaxTime);
form.Controls.Add(new PageTitle("订单调整"));
var vPanel = new VLayoutPanel();
form.Controls.Add(vPanel);
_dfContainer = new DFContainer();
_dfContainer.ID = "DFContainer";
form.Controls.Add(_dfContainer);
var panel = new HLayoutPanel();
panel.Add(new SimpleLabel("可用数量"));
var label = new Label();
label.Font.Size = 14;
label.Width = 120;
label.Font.Bold = true;
label.Text = decimal.Parse(Request.QueryString["number"]).ToString("0.00");
panel.Add(label);
panel.Add(new SimpleLabel("合计订货数量"));
_l1 = new Label();
_l1.ID = "l1";
_l1.Font.Size = 14;
_l1.Width = 120;
_l1.Font.Bold = true;
panel.Add(_l1);
panel.Add(new SimpleLabel("合计金额"));
_l2 = new Label();
_l2.ID = "l2";
_l2.Font.Size = 14;
_l2.Font.Bold = true;
_l2.Width = 120;
panel.Add(_l2);
vPanel.Add(panel);
_dfContainer.AddNonDFControl(_l1, "$l1");
_dfContainer.AddNonDFControl(_l2, "$l2");
CreateGrid(vPanel);
}
private void CreateGrid(VLayoutPanel vPanel) {
var editor = new DFCollectionEditor<Order_DetailExt>(() => Details);
editor.CanDeleteFunc = detail => true;
editor.IsEditableFunc = (field, detail) => {
if (field.Name == "SecondNumber") {
var hasSecondUnit = !string.IsNullOrEmpty(detail.Goods_SecondUnit);
return hasSecondUnit;
}
return true;
};
_goodsGrid = new DFEditGrid(editor);
_goodsGrid.DFGridSetEnabled = false;
_goodsGrid.Width = Unit.Percentage(100);
_goodsGrid.ShowLineNo = true;
_goodsGrid.Columns.Add(new DFEditGridColumn<DFValueLabel>("Order_ID"));
_goodsGrid.Columns.Add(new DFEditGridColumn<DFValueLabel>("Customer_Name"));
_goodsGrid.Columns.Add(new DFEditGridColumn<DFValueLabel>("OrderDate"));
_goodsGrid.Columns.Add(new DFEditGridColumn<DFValueLabel>("LoadTime"));
_goodsGrid.Columns.Add(new DFEditGridColumn<DFValueLabel>("Goods_Code"));
_goodsGrid.Columns.Add(new DFEditGridColumn<DFValueLabel>("Goods_Name"));
_goodsGrid.Columns.Add(new DFEditGridColumn<DFValueLabel>("Goods_Spec"));
_goodsGrid.Columns.EAdd(new DFEditGridColumn<DFTextBox>("UnitNum")).SumMode = SumMode.Sum;
_goodsGrid.Columns.Add(new DFEditGridColumn<DFValueLabel>("Unit"));
_goodsGrid.Columns.EAdd(new DFEditGridColumn<DFTextBox>("SecondNumber")).SumMode = SumMode.Sum;
_goodsGrid.Columns.EAdd(new DFEditGridColumn<DFValueLabel>("Goods_SecondUnit"));
_goodsGrid.Columns.EAdd(new DFEditGridColumn<DFTextBox>("Price"));
_goodsGrid.Columns.EAdd(new DFEditGridColumn<DFValueLabel>("Money")).SumMode = SumMode.Sum;
_goodsGrid.Columns.EAdd(new DFEditGridColumn<DFValueLabel>("PolicyPrice"));
_goodsGrid.Columns.Add(new DFEditGridColumn<DFValueLabel>("GoodsBatch_Name"));
_goodsGrid.ValueColumns.Add("SaleGoods_ID");
_goodsGrid.ValueColumns.Add("Goods_UnitConvertDirection");
_goodsGrid.ValueColumns.Add("Goods_MainUnitRatio");
_goodsGrid.ValueColumns.Add("Goods_SecondUnitRatio");
_goodsGrid.ValueColumns.Add("LeftRatio");
_goodsGrid.ValueColumns.Add("RightRatio");
vPanel.Add(_goodsGrid);
new MainToSecondConvertRowManger(_goodsGrid);
_dfContainer.AddNonDFControl(_goodsGrid, "$Grid");
var hl = vPanel.Add(new HLayoutPanel(), new VLayoutOption(HorizontalAlign.Center));
var saveBt = hl.Add(new TSButton("保存"));
saveBt.Width = Unit.Pixel(80);
saveBt.Click += SaveBtClick;
hl.Add(new LiteralControl("&nbsp;"));
TSButton back;
hl.Add(back = new TSButton("返回", delegate {
DialogUtil.SetCachedObj(this, "");
}));
back.Width = Unit.Pixel(80);
}
void SaveBtClick(object sender, EventArgs e) {
_goodsGrid.GetFromUI();
var groupByOrderID = Details.GroupBy(x => x.Order_ID);
var bl = BIFactory.Create<IOrderBL>();
var cannotUpdateID = new List<long>();
var updateIDs = new List<long>();
foreach (var orderDetails in groupByOrderID) {
var order = bl.Load(orderDetails.Key);
if (order == null)
continue;
var changed = false;
foreach (var cDetail in orderDetails) {
var detail = order.Details.FirstOrDefault(x => x.ID == cDetail.ID);
if (detail == null)
continue;
if (detail.UnitNum != cDetail.UnitNum) {
detail.UnitNum = cDetail.UnitNum;
changed = true;
}
if (detail.SecondNumber != cDetail.SecondNumber) {
detail.SecondNumber = cDetail.SecondNumber;
changed = true;
}
if (detail.Price != cDetail.Price) {
detail.Price = cDetail.Price;
changed = true;
}
}
if (changed) {
if (order.BillState != .) {
cannotUpdateID.Add(order.ID);
continue;
}
bl.Update(order);
updateIDs.Add(order.ID);
}
}
string msg;
if (updateIDs.Count > 0)
msg = string.Format("保存成功\n已更新销售订单No.{0}\n", string.Join(",", updateIDs));
else {
msg = "没有需要更新的产品!\n";
}
if (cannotUpdateID.Count > 0)
msg = string.Format("销售订单No.{0} 不是未审核状态,不能更新!", string.Join(",", cannotUpdateID));
AspUtil.Alert(this, msg);
BindGrid();
}
protected override void OnLoad(EventArgs e) {
base.OnLoad(e);
if (!IsPostBack) {
BindGrid();
}
}
private void BindGrid() {
var dom = _queryContainer.Build();
var order = dom.From.RootSource.Alias;
var detailAlias = new JoinAlias("detail", typeof(Order_Detail));
var goodsPropertyCatalog = new JoinAlias("_gpc", typeof(GoodsPropertyCatalog));
var goodsProperty = new JoinAlias("_gp", typeof(GoodsProperty));
var goods = new JoinAlias("_g", typeof(SaleGoods));
var customer = new JoinAlias("_c", typeof(Customer));
dom.From.AddJoin(JoinType.Inner, new DQDmoSource(detailAlias),
DQCondition.EQ(order, "ID", detailAlias, "Order_ID"));
dom.From.AddJoin(JoinType.Left, new DQDmoSource(goods), DQCondition.EQ(detailAlias, "SaleGoods_ID", goods, "ID"));
dom.From.AddJoin(JoinType.Left, new DQDmoSource(goodsProperty), DQCondition.EQ(goodsProperty, "ID", goods, "GoodsProperty_ID"));
dom.From.AddJoin(JoinType.Left, new DQDmoSource(goodsPropertyCatalog), DQCondition.EQ(goodsProperty, "GoodsPropertyCatalog_ID", goodsPropertyCatalog, "ID"));
dom.From.AddJoin(JoinType.Left, new DQDmoSource(customer), DQCondition.EQ(order, "Customer_ID", customer, "ID"));
OrganizationUtil.RegisterOrganizationQueryTable(dom);
dom.Columns.Add(DQSelectColumn.Field("ID", detailAlias));
dom.Columns.Add(DQSelectColumn.Field("UnitNum", detailAlias));
dom.Columns.Add(DQSelectColumn.Field("SecondNumber", detailAlias));
dom.Columns.Add(DQSelectColumn.Field("Number", detailAlias));
dom.Columns.Add(DQSelectColumn.Field("Price", detailAlias));
dom.Columns.Add(DQSelectColumn.Field("PolicyPrice", detailAlias));
dom.Columns.Add(DQSelectColumn.Field("Unit", detailAlias));
dom.Columns.Add(DQSelectColumn.Field("SaleGoods_ID", detailAlias));
dom.Columns.Add(DQSelectColumn.Field("Money", detailAlias));
dom.Columns.Add(DQSelectColumn.Field("Customer_Name", order));
dom.Columns.Add(DQSelectColumn.Field("Order_ID", detailAlias));
dom.Columns.Add(DQSelectColumn.Field("GoodsBatch_ID", detailAlias));
dom.Columns.Add(DQSelectColumn.Field("GoodsBatch_Name", detailAlias));
dom.Columns.Add(DQSelectColumn.Field("LoadTime", order));
dom.Columns.Add(DQSelectColumn.Field("OrderDate", order));
var condition = (IList<IDQExpression>)ViewStateUtil.Current.LoadFromPersistenceMedium(uint.Parse(Request.QueryString["cacheid"]),true);
foreach (var expression in condition)
{
dom.Where.Conditions.Add(expression);
}
if (GoodsProperty_ID != null) {
dom.Where.Conditions.Add(DQCondition.EQ(goodsProperty, "ID", GoodsProperty_ID));
}
OrganizationUtil.AddOrganizationLimit(dom, typeof(Order));
Details.Clear();
using (var context = new TransactionContext()) {
using (var reader = context.Session.ExecuteReader(dom)) {
while (reader.Read()) {
var detail = new Order_DetailExt {
ID = (long)reader[0],
UnitNum = (Money<decimal>?)reader[1],
SecondNumber = (Money<decimal>?)reader[2],
Number = (Money<decimal>?)reader[3],
Price = (Money<decimal>?)reader[4],
PolicyPrice = (Money<decimal>?)reader[5],
Unit = (string)reader[6],
SaleGoods_ID = (long)reader[7],
Money = (Money<>?)reader[8],
Customer_Name = (string)reader[9],
Order_ID = (long)reader[10],
GoodsBatch_ID = (long?)reader[11],
GoodsBatch_Name = (string)reader[12],
LoadTime = (DateTime?)reader[13],
OrderDate = (DateTime?)reader[14],
};
Details.Add(detail);
}
}
}
foreach (var detail in Details) {
Dmo.RefreshDependency(detail, "SaleGoods_ID");
}
_goodsGrid.DataBind();
_l1.Text = Math.Round(Details.Sum(x => (decimal?)(x.UnitNum) ?? 0), 2).ToString();
_l2.Text = Math.Round(Details.Sum(x => (decimal?)(x.Money) ?? 0), 2).ToString();
}
[DFClass,Serializable]
class Order_DetailExt : Order_Detail {
[LogicName("发货时间")]
public DateTime? LoadTime { get; set; }
[LogicName("订货时间")]
public DateTime? OrderDate { get; set; }
}
}
}