Browse Source

需求单No.140495 屠宰分割模块新增【一次均衡计划】操作界面

master
yibo 7 years ago
parent
commit
5fa9e0affe
5 changed files with 980 additions and 0 deletions
  1. +21
    -0
      B3ButcherManageToSale.Web/B3ButcherManageToSale.Web.csproj
  2. +259
    -0
      B3ButcherManageToSale.Web/Pages/B3ButcherManageToSale/Overlays/CustomerAdjust.cs
  3. +661
    -0
      B3ButcherManageToSale.Web/Pages/B3ButcherManageToSale/Overlays/SaleOutStoreBalance.cs
  4. +37
    -0
      B3ButcherManageToSale.Web/Pages/B3ButcherManageToSale/Overlays/SaleOutStoreBalance.xml
  5. +2
    -0
      B3ButcherManageToSale.Web/PluginClass.cs

+ 21
- 0
B3ButcherManageToSale.Web/B3ButcherManageToSale.Web.csproj View File

@ -34,6 +34,10 @@
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\BwpB3Project\tsref\Debug\B3ButcherManage.dll</HintPath> <HintPath>..\..\..\BwpB3Project\tsref\Debug\B3ButcherManage.dll</HintPath>
</Reference> </Reference>
<Reference Include="B3ButcherManage.Web, Version=1.0.0.0, Culture=neutral, PublicKeyToken=3a973053c7ebf11c, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\tsref\Debug\B3ButcherManage.Web.dll</HintPath>
</Reference>
<Reference Include="B3Frameworks, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a04fa581c0f74d43, processorArchitecture=MSIL"> <Reference Include="B3Frameworks, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a04fa581c0f74d43, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\BwpB3Project\tsref\Debug\B3Frameworks.dll</HintPath> <HintPath>..\..\..\BwpB3Project\tsref\Debug\B3Frameworks.dll</HintPath>
@ -50,6 +54,10 @@
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\BwpB3Project\tsref\Debug\B3System.dll</HintPath> <HintPath>..\..\..\BwpB3Project\tsref\Debug\B3System.dll</HintPath>
</Reference> </Reference>
<Reference Include="B3UnitedInfos, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a04fa581c0f74d43, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\tsref\Debug\B3UnitedInfos.dll</HintPath>
</Reference>
<Reference Include="Forks.EnterpriseServices, Version=3.1.0.0, Culture=neutral, PublicKeyToken=7254430f49d10aae, processorArchitecture=MSIL"> <Reference Include="Forks.EnterpriseServices, Version=3.1.0.0, Culture=neutral, PublicKeyToken=7254430f49d10aae, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\BwpB3Project\tsref\Debug\Forks.EnterpriseServices.dll</HintPath> <HintPath>..\..\..\BwpB3Project\tsref\Debug\Forks.EnterpriseServices.dll</HintPath>
@ -58,6 +66,10 @@
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\BwpB3Project\tsref\Debug\Forks.Utils.dll</HintPath> <HintPath>..\..\..\BwpB3Project\tsref\Debug\Forks.Utils.dll</HintPath>
</Reference> </Reference>
<Reference Include="Newtonsoft.Json, Version=4.0.3.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\tsref\release\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />
<Reference Include="System.Web" /> <Reference Include="System.Web" />
@ -84,9 +96,18 @@
</Reference> </Reference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Pages\B3ButcherManageToSale\Overlays\CustomerAdjust.cs">
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="Pages\B3ButcherManageToSale\Overlays\SaleOutStoreBalance.cs">
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="PluginClass.cs" /> <Compile Include="PluginClass.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Pages\B3ButcherManageToSale\Overlays\SaleOutStoreBalance.xml" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.


+ 259
- 0
B3ButcherManageToSale.Web/Pages/B3ButcherManageToSale/Overlays/CustomerAdjust.cs View File

@ -0,0 +1,259 @@
using BWP.Web.Utils;
using Forks.EnterpriseServices.DataForm;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.UI;
using System.Web.UI.WebControls;
using TSingSoft.WebControls2;
using TSingSoft.WebPluginFramework.Pages;
using Forks.Utils.Collections;
using Forks.Utils;
using BWP.B3Sale.BO;
using BWP.B3UnitedInfos.BO;
using Forks.EnterpriseServices.DomainObjects2;
using Forks.EnterpriseServices.DomainObjects2.DQuery;
using Forks.EnterpriseServices.SqlDoms;
using BWP.B3Frameworks;
using BWP.B3Frameworks.BO.NamedValueTemplate;
using Newtonsoft.Json;
namespace BWP.Web.Pages.B3ButcherManageToSale.Overlays
{
class CustomerAdjust : ServerPage
{
long? lineID
{
get
{
if (string.IsNullOrEmpty(Request.QueryString["lineID"]))
return null;
return long.Parse(Request.QueryString["lineID"]);
}
}
long goodsID
{
get
{
return long.Parse(Request.QueryString["goodsID"]);
}
}
long? storeID
{
get
{
if (string.IsNullOrEmpty(Request.QueryString["storeID"]))
return null;
return long.Parse(Request.QueryString["storeID"]);
}
}
DateTime? minDate
{
get
{
if (string.IsNullOrEmpty(Request.QueryString["minDate"]))
return null;
return DateTime.Parse(Request.QueryString["minDate"]);
}
}
DateTime? maxDate
{
get
{
if (string.IsNullOrEmpty(Request.QueryString["maxDate"]))
return null;
return DateTime.Parse(Request.QueryString["maxDate"]);
}
}
List<InnerDetail> details
{
get
{
if (ViewState["details"] == null)
ViewState["details"] = new List<InnerDetail>();
return (List<InnerDetail>)ViewState["details"];
}
set { ViewState["details"] = value; }
}
Label lb1, lb2;
Label dinghuoLbl, peihuoLbl;
protected override void InitForm(System.Web.UI.HtmlControls.HtmlForm form)
{
var vPanel = form.EAdd(new VLayoutPanel());
var hPanel1 = vPanel.Add(new HLayoutPanel(), new VLayoutOption(HorizontalAlign.Left));
hPanel1.Add(new SimpleLabel("线路名称"));
lb1 = hPanel1.Add(new Label());
lb1.Font.Size = 12;
lb1.Font.Bold = true;
var hPanel2 = vPanel.Add(new HLayoutPanel(), new VLayoutOption(HorizontalAlign.Left));
hPanel2.Add(new SimpleLabel("产品名称"));
lb2 = hPanel2.Add(new Label());
lb2.Font.Size = 12;
lb2.Font.Bold = true;
var hPanel3 = vPanel.Add(new HLayoutPanel(), new VLayoutOption(HorizontalAlign.Left));
hPanel3.Add(new SimpleLabel("订货数量"));
dinghuoLbl = hPanel3.Add(new Label());
dinghuoLbl.Font.Size = 12;
dinghuoLbl.Font.Bold = true;
hPanel3.Add(new LiteralControl("&nbsp;&nbsp;"));
hPanel3.Add(new SimpleLabel("配货数量"));
peihuoLbl = hPanel3.Add(new Label());
peihuoLbl.Font.Size = 12;
peihuoLbl.Font.Bold = true;
AddGrid(vPanel);
form.Controls.Add(new TSButton("确定", delegate
{
grid.GetFromUI();
DialogUtil.SetCachedObj(this, details);
}));
}
DFEditGrid grid;
private void AddGrid(VLayoutPanel vPanel)
{
var editor = new DFCollectionEditor<InnerDetail>(() => details);
editor.IsEditableFunc = (field, detail) => { return field.Name == "SendNumber"; };
grid = vPanel.Add(new DFEditGrid(editor) { Width = Unit.Percentage(100) });
grid.Columns.Add(new DFEditGridColumn("ID"));
grid.Columns.Add(new DFEditGridColumn("CustomerName"));
grid.Columns.EAdd(new DFEditGridColumn("Number")).SumMode = SumMode.Sum;
var col = new DFEditGridColumn<DFTextBox>("SendNumber");
col.InitEditControl += (sender, e) =>
{
e.Control.Attributes["onchange"] = "_SumNumber();";
};
col.SumMode = SumMode.Sum;
grid.Columns.Add(col);
}
void FillDetail()
{
var ck = Request.Cookies["innerDetails"];
if (ck != null && !string.IsNullOrEmpty(ck.Value))
{
var list = JsonConvert.DeserializeObject<List<InnerDetail>>(ck.Value);
if (list.Any(x => x.DeliverGoodsLine_ID == lineID))
details = list.Where(x => x.DeliverGoodsLine_ID == lineID).ToList();
}
if (details.Count == 0)
CreateDetail();
}
void CreateDetail()
{
var main = new JoinAlias(typeof(SaleOutStore));
var detail = new JoinAlias(typeof(SaleOutStore_Detail));
var query = new DQueryDom(main);
query.From.AddJoin(JoinType.Left, new DQDmoSource(detail), DQCondition.EQ(main, "ID", detail, "SaleOutStore_ID"));
query.Columns.Add(DQSelectColumn.Field("ID", main));
query.Columns.Add(DQSelectColumn.Field("ID", detail));
query.Columns.Add(DQSelectColumn.Field("Customer_Name"));
query.Columns.Add(DQSelectColumn.Field("UnitNum", detail));
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Domain_ID", DomainContext.Current.ID), DQCondition.EQ("BillState", .), DQCondition.GreaterThan(detail, "UnitNum", 0)));
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ(detail, "SaleGoods_ID", goodsID), DQCondition.EQ("Store_ID", storeID), DQCondition.EQ("DeliverGoodsLine_ID", lineID)));
if (minDate.HasValue)
query.Where.Conditions.Add(DQCondition.GreaterThanOrEqual("LoadTime", minDate));
if (maxDate.HasValue)
query.Where.Conditions.Add(DQCondition.LessThanOrEqual("LoadTime", maxDate));
details.Clear();
using (var session = Dmo.NewSession())
{
using (var reader = session.ExecuteReader(query))
{
while (reader.Read())
{
var item = new InnerDetail();
item.ID = (long)reader[0];
item.DetailID = (long)reader[1];
item.CustomerName = (string)reader[2];
item.Number = Convert.ToDecimal(reader[3]);
item.SendNumber = item.Number;
item.DeliverGoodsLine_ID = lineID;
details.Add(item);
}
}
}
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (!IsPostBack)
{
if (lineID.HasValue)
lb1.Text = WebBLUtil.GetDmoPropertyByID<string>(typeof(DeliverGoodsLine), "Name", lineID.Value);
lb2.Text = WebBLUtil.GetDmoPropertyByID<string>(typeof(Goods), "Name", goodsID);
FillDetail();
dinghuoLbl.Text = details.Sum(x => (x.Number ?? 0)).ToString("0.00");
peihuoLbl.Text = dinghuoLbl.Text;
grid.DataBind();
}
}
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
var pageIndex = grid.CurrentPageIndex;
var size = grid.PageSize;
var index = 0;
Money<decimal> unitNum = 0;
foreach (var detail in details)
{
var begin = size * pageIndex;
var end = Math.Min(details.Count, (pageIndex + 1) * size);
if (index < begin || index > end - 1)
{
unitNum += (detail.SendNumber ?? 0);
}
index++;
}
var s = string.Format(@"<script language=javascript>
var sumUnitNumOtherPage = {0};
</script>", unitNum);
Page.ClientScript.RegisterClientScriptBlock(GetType(), "OtherPageNumber", s, false);
string script = @"var defaultGrid=document.all." + grid.ClientID + @";
function _SumNumber()
{
var grid = defaultGrid.behind;
var itemEndIndex = grid.mItemEndIndex - 1;
var sumN = sumUnitNumOtherPage;
for (i = 1; i <= itemEndIndex; i++) {
var row = grid.front.rows[i];
var m = row.dfContainer.getValue('SendNumber');
if (m != null && m != '') {
sumN = sumN + 1 * m;
}
}
var label = document.getElementById('{adjustNumberLabel}')
label.innerText = sumN.toFixed(2);
} ";
script = script.Replace("{adjustNumberLabel}", peihuoLbl.ClientID);
//script = script.Replace("{difNumber}", _difNumber.ClientID);
Page.ClientScript.RegisterStartupScript(GetType(), "Startup", script, true);
}
}
}

+ 661
- 0
B3ButcherManageToSale.Web/Pages/B3ButcherManageToSale/Overlays/SaleOutStoreBalance.cs View File

@ -0,0 +1,661 @@
using BWP.B3ButcherManage.BO;
using BWP.B3Frameworks;
using BWP.B3Frameworks.BO;
using BWP.B3Frameworks.BO.NamedValueTemplate;
using BWP.B3Frameworks.Utils;
using BWP.B3Sale.BO;
using BWP.B3UnitedInfos.BO;
using BWP.Web.Layout;
using BWP.Web.Utils;
using BWP.Web.WebControls;
using Forks.EnterpriseServices;
using Forks.EnterpriseServices.DataForm;
using Forks.EnterpriseServices.DomainObjects2;
using Forks.EnterpriseServices.DomainObjects2.DQuery;
using Forks.EnterpriseServices.SqlDoms;
using Forks.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.UI;
using System.Web.UI.WebControls;
using TSingSoft.WebControls2;
using TSingSoft.WebPluginFramework;
using TSingSoft.WebPluginFramework.Pages;
using Forks.Utils.Collections;
using System.Web;
using Newtonsoft.Json;
using Forks.EnterpriseServices.BusinessInterfaces;
using BWP.B3Sale.BL;
namespace BWP.Web.Pages.B3ButcherManageToSale.Overlays
{
class SaleOutStoreBalance : B3ButcherManage.Tools.SaleOutStoreBalance
{
QueryContainer mQueryContainer;
readonly DFInfo _dFInfo;
public SaleOutStoreBalance()
{
var type = this.GetType();
mQueryContainer = QueryContainer.FromResource(type.FullName + ".xml", type.Assembly);
_dFInfo = DFInfo.Get(typeof(SaleOutStore));
}
List<SendOutStoreDetail> details
{
get
{
if (ViewState["details"] == null)
ViewState["details"] = new List<SendOutStoreDetail>();
return (List<SendOutStoreDetail>)ViewState["details"];
}
set { ViewState["details"] = value; }
}
List<InnerDetail> innerDetails
{
get
{
if (ViewState["innerDetails"] == null)
ViewState["innerDetails"] = new List<InnerDetail>();
return (List<InnerDetail>)ViewState["innerDetails"];
}
set { ViewState["innerDetails"] = value; }
}
DFBrowseGrid _browseGrid;
private Label goodsNameShow, _difNumber, _adjustNumberLabel;
DFBoolRadioBox adjustType;
DFCheckBox avgAdjust;
VLayoutPanel panel1, panel2;
DFEditGrid _editGrid1, _editGrid2;
bool byLine
{
get
{
if (ViewState["byLine"] == null)
return true;
return (bool)ViewState["byLine"];
}
set { ViewState["byLine"] = value; }
}
protected override void InitForm(System.Web.UI.HtmlControls.HtmlForm form)
{
base.InitForm(form);
CreateQueryPanel(form.EAdd(new VLayoutPanel()));
CreateBrowseGrid(form.EAdd(new TitlePanel("缺货存货明细")));
CreateEditGrid(form.EAdd(new TitlePanel("配货明细")));
}
decimal productNumber
{
get
{
if (ViewState["productNumber"] == null)
return 0;
return (decimal)ViewState["productNumber"];
}
set { ViewState["productNumber"] = value; }
}
private void CreateQueryPanel(VLayoutPanel panel)
{
var manager = new LayoutManager("", _dFInfo, mQueryContainer);
manager.Add("AccountingUnit_ID", QueryCreator.DFChoiceBox(_dFInfo.Fields["AccountingUnit_ID"], B3FrameworksConsts.DataSources.));
manager.Add("Store_ID", QueryCreator.DFChoiceBox(_dFInfo.Fields["Store_ID"], B3FrameworksConsts.DataSources.));
manager.Add("LoadTime", QueryCreator.TimeRange(_dFInfo.Fields["LoadTime"], mQueryContainer, "MinLoadTime", "MaxLoadTime"));
var config = manager.CreateDefaultConfig(6);
config.Expand = false;
panel.Add(manager.CreateLayout(), new VLayoutOption(HorizontalAlign.Left));
panel.Add(new TSButton("查询缺货", delegate { StartQuery(); }), new VLayoutOption(HorizontalAlign.Left));
}
string dateStr
{
get
{
if (ViewState["dateStr"] == null)
return string.Empty;
return ViewState["dateStr"].ToString();
}
set { ViewState["dateStr"] = value; }
}
private void CreateBrowseGrid(TitlePanel titlePanel)
{
_browseGrid = titlePanel.EAdd(new DFBrowseGrid(new DFDataTableEditor()) { Width = Unit.Percentage(100) });
_browseGrid.Columns.Add(new DFBrowseGridAutoColumn("Goods_ID", "Store_ID"));
_browseGrid.SingleSelection += (sender, e) =>
{
byLine = adjustType.Value.Value;
var gid = (long)e.Row["Goods_ID"];
var sid = (long?)e.Row["Store_ID"];
goodsNameShow.Text = (string)e.Row["Name"];
_difNumber.Text = ((decimal)e.Row["差异数量"]).ToString("0.00");
_adjustNumberLabel.Text = ((decimal)e.Row["Number"]).ToString("0.00");
details.Clear();
innerDetails.Clear();
SaveCookie("");
productNumber = (decimal)e.Row["ProductNumber"];
var list = CreateDetails(gid, sid);
foreach (var item in list.OrderByDescending(x => x.Number))
details.Add(item);
_editGrid1.DataBind();
_editGrid2.DataBind();
panel1.Visible = byLine;
panel2.Visible = !byLine;
avgAdjust.Visible = byLine;
};
}
private List<SendOutStoreDetail> CreateDetails(long goodsID, long? storeID)
{
if (byLine)
return CreateDetailsByDriveLine(goodsID, storeID);
return CreateDetailsByBill(goodsID, storeID);
}
private List<SendOutStoreDetail> CreateDetailsByBill(long goodsId, long? storeID)
{
var query = mQueryContainer.Build();
var detail = JoinAlias.Create("detail");
query.Columns.Add(DQSelectColumn.Field("LoadTime"));
query.Columns.Add(DQSelectColumn.Field("ID"));
query.Columns.Add(DQSelectColumn.Field("Customer_Name"));
query.Columns.Add(DQSelectColumn.Field("ID", detail));
query.Columns.Add(DQSelectColumn.Field("Goods_SecondUnit", detail));
query.Columns.Add(DQSelectColumn.Field("SecondNumber", detail));
query.Columns.Add(DQSelectColumn.Field("Unit", detail));
query.Columns.Add(DQSelectColumn.Field("UnitNum", detail));
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Domain_ID", DomainContext.Current.ID), DQCondition.EQ("BillState", .)));
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ(detail, "SaleGoods_ID", goodsId), DQCondition.EQ("Store_ID", storeID)));
var list = new List<SendOutStoreDetail>();
using (var session = Dmo.NewSession())
{
using (var reader = session.ExecuteReader(query))
{
while (reader.Read())
{
var item = new SendOutStoreDetail();
item.Date = (DateTime?)reader[0];
item.ID = (long)reader[1];
item.CustomerName = (string)reader[2];
item.DetailID = (long)reader[3];
item.SecondUnit = (string)reader[4];
item.SecondNumber = (Money<decimal>?)reader[5];
item.Unit = (string)reader[6];
item.Number = (Money<decimal>?)reader[7];
item.SendNumber = item.Number.EToDecimal();
list.Add(item);
}
}
}
return list;
}
private List<SendOutStoreDetail> CreateDetailsByDriveLine(long goodsId, long? storeID)
{
var query = mQueryContainer.Build();
var detail = JoinAlias.Create("detail");
query.Columns.Add(DQSelectColumn.Field("DeliverGoodsLine_ID"));
query.Columns.Add(DQSelectColumn.Field("DeliverGoodsLine_Name"));
query.Columns.Add(DQSelectColumn.Field("Goods_SecondUnit", detail));
query.Columns.Add(DQSelectColumn.Sum(detail, "SecondNumber"));
query.Columns.Add(DQSelectColumn.Field("Unit", detail));
query.Columns.Add(DQSelectColumn.Sum(detail, "UnitNum"));
query.GroupBy.Expressions.Add(DQExpression.Field("DeliverGoodsLine_ID"));
query.GroupBy.Expressions.Add(DQExpression.Field("DeliverGoodsLine_Name"));
query.GroupBy.Expressions.Add(DQExpression.Field(detail, "Goods_SecondUnit"));
query.GroupBy.Expressions.Add(DQExpression.Field(detail, "Unit"));
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Domain_ID", DomainContext.Current.ID), DQCondition.EQ("BillState", .)));
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ(detail, "SaleGoods_ID", goodsId), DQCondition.EQ("Store_ID", storeID)));
var list = new List<SendOutStoreDetail>();
using (var session = Dmo.NewSession())
{
using (var reader = session.ExecuteReader(query))
{
while (reader.Read())
{
var item = new SendOutStoreDetail();
item.DeliverGoodsLine_ID = (long?)reader[0];
item.DeliverGoodsLine_Name = (string)reader[1];
item.SecondUnit = (string)reader[2];
item.SecondNumber = (Money<decimal>?)reader[3];
item.Unit = (string)reader[4];
item.Number = (Money<decimal>?)reader[5];
item.SendNumber = item.Number.EToDecimal();
item.Goods_ID = goodsId;
item.Store_ID = storeID;
list.Add(item);
}
}
}
return list;
}
private void StartQuery()
{
_browseGrid.Query = GetQueryDom();
_browseGrid.DataBind();
_browseGrid.CurrentPageIndex = 0;
if (details.Any())
{
SaveCookie("");
goodsNameShow.Text = "";
_difNumber.Text = "";
_adjustNumberLabel.Text = "";
details.Clear();
innerDetails.Clear();
_editGrid1.DataBind();
_editGrid2.DataBind();
}
}
private DQueryDom GetQueryDom()
{
var temp = new JoinAlias(typeof(SaleOutStoreTemp));
var forecast = new JoinAlias(typeof(ForecastTemp));
var goods = new JoinAlias(typeof(Goods));
var store = new JoinAlias(typeof(Store));
var query = new DQueryDom(temp);
query.RegisterQueryTable(typeof(SaleOutStoreTemp), new string[] { "Goods_ID", "Store_ID", "Number" }, SaleOutStoreTemp.GetQuery(mQueryContainer));
var v = string.Empty;
query.RegisterQueryTable(typeof(ForecastTemp), new string[] { "Goods_ID", "ProductNumber" }, ForecastTemp.GetQuery(mQueryContainer, out v));
dateStr = v;
query.From.AddJoin(JoinType.Left, new DQDmoSource(forecast), DQCondition.EQ(temp, "Goods_ID", forecast, "Goods_ID"));
query.From.AddJoin(JoinType.Left, new DQDmoSource(goods), DQCondition.EQ(temp, "Goods_ID", goods, "ID"));
query.From.AddJoin(JoinType.Left, new DQDmoSource(store), DQCondition.EQ(temp, "Store_ID", store, "ID"));
query.Columns.Add(DQSelectColumn.Field("Goods_ID", temp));
query.Columns.Add(DQSelectColumn.Field("Store_ID"));
query.Columns.Add(DQSelectColumn.Field("Code", goods, "存货编码"));
query.Columns.Add(DQSelectColumn.Field("Name", goods, "存货名称"));
query.Columns.Add(DQSelectColumn.Field("Spec", goods, "规格"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Field(store, "Name"), "仓库"));
query.Columns.Add(DQSelectColumn.Field("MainUnit", goods, "主单位"));
query.Columns.Add(DQSelectColumn.Field("Number"));
query.Columns.Add(DQSelectColumn.Field("ProductNumber", forecast, "预估产量"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Subtract(DQExpression.Field("Number"), DQExpression.Field(forecast, "ProductNumber")).ECastType<decimal>(), "差异数量"));
query.Where.Conditions.Add(DQCondition.GreaterThan(DQExpression.Field("Number"), DQExpression.Field(forecast, "ProductNumber")));
return query;
}
private void CreateEditGrid(TitlePanel titlePanel)
{
adjustType = titlePanel.EAdd(new DFBoolRadioBox() { Value = true, TrueIsFirst = true, TrueDisplayValue = "按线路调整", FalseDisplayValue = "按客户调整" });
var hPanel = titlePanel.EAdd(new HLayoutPanel());
hPanel.Add(new LiteralControl("&nbsp;&nbsp;"));
hPanel.Add(new Label() { Text = "存货:" });
goodsNameShow = hPanel.Add(new Label());
goodsNameShow.Font.Size = 12;
goodsNameShow.Font.Bold = true;
var label1 = new Label();
label1.Text = "差异数量:";
_difNumber = new Label();
_difNumber.ID = "difNumber";
_difNumber.Font.Size = 12;
_difNumber.Font.Bold = true;
var label2 = new Label();
label2.Text = "配货数量:";
_adjustNumberLabel = new Label();
_adjustNumberLabel.ID = "adjustNumberLabel";
_adjustNumberLabel.Font.Size = 12;
_adjustNumberLabel.Font.Bold = true;
hPanel.Add(new LiteralControl("&nbsp;&nbsp;"));
hPanel.Add(label1);
hPanel.Add(_difNumber);
hPanel.Add(new LiteralControl("&nbsp;&nbsp;"));
hPanel.Add(label2);
hPanel.Add(_adjustNumberLabel);
hPanel.Add(new LiteralControl("&nbsp;&nbsp;"));
avgAdjust = hPanel.Add(new DFCheckBox() { Text = "平均分配" });
avgAdjust.Style.Add("margin", "0px 20px");
hPanel.Add(new TSButton("更新报价数量", delegate { AdjustSaleOutStore(); }));
AddGrid1(titlePanel);
AddGrid2(titlePanel);
}
void AddGrid1(TitlePanel titlePanel)
{
panel1 = titlePanel.EAdd(new VLayoutPanel());
var editor = new DFCollectionEditor<SendOutStoreDetail>(() => details);
_editGrid1 = panel1.Add(new DFEditGrid(editor) { Width = Unit.Percentage(100) });
_editGrid1.Columns.Add(new DFEditGridColumn("DeliverGoodsLine_Name"));
_editGrid1.Columns.Add(new DFEditGridColumn("SecondUnit"));
_editGrid1.Columns.Add(new DFEditGridColumn("SecondNumber"));
_editGrid1.Columns.Add(new DFEditGridColumn("Unit"));
_editGrid1.Columns.Add(new DFEditGridColumn("Number"));
_editGrid1.Columns.EAdd(new DFGridCustomExtColumn((obj, cell, rowIndex) =>
{
var detail = (SendOutStoreDetail)obj;
var dgBtn = new DialogButton() { Width = Unit.Pixel(120) };
dgBtn.Text = string.Format("{0:#0.##}", detail.SendNumber);
var url = string.Format("~/../B3ButcherManageToSale/Overlays/CustomerAdjust.aspx?lineID={0}&goodsID={1}&storeID={2}&{3}", detail.DeliverGoodsLine_ID, detail.Goods_ID, detail.Store_ID, dateStr);
dgBtn.Enabled = detail.DeliverGoodsLine_ID.HasValue;
dgBtn.Url = WpfPageUrl.ToGlobal(url);
dgBtn.Click += delegate
{
var back = DialogUtil.GetCachedObj<InnerDetail>(this);
var tags = innerDetails.Where(x => x.DeliverGoodsLine_ID == detail.DeliverGoodsLine_ID).ToList();
foreach (var item in tags)
innerDetails.Remove(item);
innerDetails.AddRange(back);
var d = details.First(x => x.DeliverGoodsLine_ID == detail.DeliverGoodsLine_ID);
d.SendNumber = back.Sum(x => (x.SendNumber ?? 0));
d.AdjustNumber = d.Number - d.SendNumber;
var adNumber = details.Sum(x => (x.SendNumber ?? 0));
_adjustNumberLabel.Text = adNumber.ToString("0.00");
_difNumber.Text = (adNumber - productNumber).ToString("0.00");
_editGrid1.DataBind();
SaveCookie(JsonConvert.SerializeObject(innerDetails));
};
cell.Controls.Add(dgBtn);
cell.Align = "center";
})).HeaderText = "配货数量";
_editGrid1.Columns.Add(new DFEditGridColumn("AdjustNumber"));
}
void SaveCookie(string value)
{
HttpCookie cookie = new HttpCookie("innerDetails", value);
cookie.Expires = DateTime.Now.AddHours(2);
Response.Cookies.Add(cookie);
}
void AddGrid2(TitlePanel titlePanel)
{
panel2 = titlePanel.EAdd(new VLayoutPanel());
var editor = new DFCollectionEditor<SendOutStoreDetail>(() => details);
editor.IsEditableFunc = (field, detail) => { return field.Name == "SendNumber"; };
_editGrid2 = panel2.Add(new DFEditGrid(editor) { Width = Unit.Percentage(100) });
_editGrid2.Columns.Add(new DFEditGridColumn("Date"));
_editGrid2.Columns.Add(new DFEditGridColumn("ID"));
_editGrid2.Columns.Add(new DFEditGridColumn("CustomerName"));
_editGrid2.Columns.Add(new DFEditGridColumn("SecondUnit"));
_editGrid2.Columns.Add(new DFEditGridColumn("SecondNumber"));
_editGrid2.Columns.Add(new DFEditGridColumn("Unit"));
_editGrid2.Columns.Add(new DFEditGridColumn("Number"));
var col = new DFEditGridColumn<DFTextBox>("SendNumber");
col.InitEditControl += (sender, e) =>
{
e.Control.Attributes["onchange"] = "_SumNumber();";
};
_editGrid2.Columns.Add(col);
_editGrid2.Columns.Add(new DFEditGridColumn("AdjustNumber"));
}
void AdjustSaleOutStore()
{
if (byLine)
{
if (avgAdjust.Checked)
{
innerDetails.Clear();
AvgAdjust();
}
Adjust(innerDetails.Where(x => x.Number != (x.SendNumber ?? 0)));
}
else
{
_editGrid2.GetFromUI();
Adjust(details.Where(x => x.Number != (x.SendNumber ?? 0)));
}
AspUtil.Alert(this, "更新完毕");
StartQuery();
}
void AvgAdjust()
{
var total = details.Sum(x => (x.Number ?? 0).Value);
if (total == 0)
return;
var avg = productNumber / total;
var f = details.First();
var list = CreateDetailsByBill(f.Goods_ID, f.Store_ID);
foreach (var item in list)
{
var entity = new InnerDetail();
entity.ID = item.ID;
entity.DetailID = item.DetailID;
entity.Number = item.Number.EToDecimal();
entity.SendNumber = entity.Number * avg;
innerDetails.Add(entity);
}
}
void Adjust<T>(IEnumerable<T> list)
where T : CanAdjust
{
using (var session = Dmo.NewSession())
{
var bl = BIFactory.Create<ISaleOutStoreBL>(session);
foreach (var dmoGroupby in list.GroupBy(x => x.ID))
{
var entity = bl.Load(dmoGroupby.Key);
//此时销售出库单据可能已经审核--- 已审核的单据不修改 详见错误单46102
if (entity.BillState == .)
{
continue;
}
var updateDetail = entity.Details.Where(x => dmoGroupby.Any(y => y.DetailID == x.ID));
foreach (var d in updateDetail)
{
var first = dmoGroupby.First(x => x.DetailID == d.ID);
d.UnitNum = first.SendNumber;
}
bl.Update(entity);
}
session.Commit();
}
}
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
var pageIndex = _editGrid1.CurrentPageIndex;
var size = _editGrid1.PageSize;
var index = 0;
Money<decimal> unitNum = 0;
foreach (var detail in details)
{
var begin = size * pageIndex;
var end = Math.Min(details.Count, (pageIndex + 1) * size);
if (index < begin || index > end - 1)
{
unitNum += (detail.SendNumber ?? 0);
}
index++;
}
var s = string.Format(@"<script language=javascript>
var sumUnitNumOtherPage = {0};
</script>", unitNum);
Page.ClientScript.RegisterClientScriptBlock(GetType(), "OtherPageNumber", s, false);
string script = @"var defaultGrid=document.all." + _editGrid1.ClientID + @";
function _SumNumber()
{
var grid = defaultGrid.behind;
var itemEndIndex = grid.mItemEndIndex - 1;
var sumN = sumUnitNumOtherPage;
for (i = 1; i <= itemEndIndex; i++) {
var row = grid.front.rows[i];
var m = row.dfContainer.getValue('SendNumber');
var rownumber=row.dfContainer.getValue('Number');
row.dfContainer.setValue('AdjustNumber',(rownumber-m).toFixed(2));
if (m != null && m != '') {
sumN = sumN + 1 * m;
}
}
var label = document.getElementById('{adjustNumberLabel}')
label.innerText = sumN.toFixed(2);
if( sumN > {thisNumber}){
label.style.color = 'red';
} else {
label.style.color = 'black';
}
var labelDiffNumber = document.getElementById('{difNumber}')
labelDiffNumber.innerText = (sumN-{thisNumber}).toFixed(2);
} ";
script = script.Replace("{thisNumber}", productNumber.ToString());
script = script.Replace("{adjustNumberLabel}", _adjustNumberLabel.ClientID);
script = script.Replace("{difNumber}", _difNumber.ClientID);
Page.ClientScript.RegisterStartupScript(GetType(), "Startup", script, true);
}
}
[DFClass]
class SaleOutStoreTemp
{
public long Goods_ID { get; set; }
public long? Store_ID { get; set; }
[LogicName("订货数量")]
public decimal? Number { get; set; }
public static DQueryDom GetQuery(QueryContainer mQueryContainer)
{
var query = mQueryContainer.Build();
var detail = JoinAlias.Create("detail");
query.Columns.Add(DQSelectColumn.Field("SaleGoods_ID", detail));
query.Columns.Add(DQSelectColumn.Field("Store_ID"));
query.GroupBy.Expressions.Add(DQExpression.Field(detail, "SaleGoods_ID"));
query.GroupBy.Expressions.Add(DQExpression.Field("Store_ID"));
query.Columns.Add(DQSelectColumn.Sum(detail, "UnitNum"));
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Domain_ID", DomainContext.Current.ID), DQCondition.EQ("BillState", .), DQCondition.GreaterThan(detail, "UnitNum", 0)));
return query;
}
}
[DFClass]
class ForecastTemp
{
public long Goods_ID { get; set; }
public decimal? ProductNumber { get; set; }
public static DQueryDom GetQuery(QueryContainer mQueryContainer, out string dateStr)
{
dateStr = string.Empty;
var main = new JoinAlias(typeof(ButcherForecast));
var detail = new JoinAlias(typeof(ButcherForecast_Detail));
var query = new DQueryDom(main);
query.From.AddJoin(JoinType.Left, new DQDmoSource(detail), DQCondition.EQ(main, "ID", detail, "ButcherForecast_ID"));
query.Columns.Add(DQSelectColumn.Field("Goods_ID", detail));
query.GroupBy.Expressions.Add(DQExpression.Field(detail, "Goods_ID"));
query.Columns.Add(DQSelectColumn.Sum(detail, "ProductNumber"));
var min = mQueryContainer.GetControl<DFDateTimeInput>("MinLoadTime").Value;
if (min.HasValue)
{
query.Where.Conditions.Add(DQCondition.GreaterThanOrEqual("SendDate", min));
dateStr = string.Format("minDate={0:yyyy/MM/dd HH:mm:ss}&", min.Value);
}
var max = mQueryContainer.GetControl<DFDateTimeInput>("MaxLoadTime").Value;
if (max.HasValue)
{
query.Where.Conditions.Add(DQCondition.LessThanOrEqual("SendDate", max));
dateStr += string.Format("maxDate={0:yyyy/MM/dd HH:mm:ss}&", max.Value);
}
dateStr = dateStr.TrimEnd('&');
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Domain_ID", DomainContext.Current.ID), DQCondition.EQ("BillState", .), DQCondition.GreaterThan(detail, "ProductNumber", 0)));
return query;
}
}
[DFClass, Serializable]
class SendOutStoreDetail : CanAdjust
{
[LogicName("日期")]
public DateTime? Date { get; set; }
[LogicName("单号")]
public long ID { get; set; }
[LogicName("客户")]
public string CustomerName { get; set; }
public long? DeliverGoodsLine_ID { get; set; }
[LogicName("送货线路")]
public string DeliverGoodsLine_Name { get; set; }
[LogicName("辅单位")]
public string SecondUnit { get; set; }
[LogicName("辅数量")]
public Money<decimal>? SecondNumber { get; set; }
[LogicName("报价单位")]
public string Unit { get; set; }
[LogicName("报价数量")]
public Money<decimal>? Number { get; set; }
[LogicName("配货数量")]
public decimal? SendNumber { get; set; }
[LogicName("调整数量")]
public Money<decimal>? AdjustNumber { get; set; }
public long DetailID { get; set; }
public long Goods_ID { get; set; }
public long? Store_ID { get; set; }
}
[DFClass, Serializable]
class InnerDetail : CanAdjust
{
public long? DeliverGoodsLine_ID { get; set; }
[LogicName("单号")]
public long ID { get; set; }
public long DetailID { get; set; }
[LogicName("客户")]
public string CustomerName { get; set; }
[LogicName("报价数量")]
public decimal? Number { get; set; }
[LogicName("配货数量")]
public decimal? SendNumber { get; set; }
}
interface CanAdjust
{
long ID { get; set; }
long DetailID { get; set; }
decimal? SendNumber { get; set; }
}
}

+ 37
- 0
B3ButcherManageToSale.Web/Pages/B3ButcherManageToSale/Overlays/SaleOutStoreBalance.xml View File

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8" ?>
<Select xmlns="urn:XDQuery">
<Columns>
</Columns>
<From>
<Join type="Left">
<DmoClass class="BWP.B3Sale.BO.SaleOutStore, B3Sale" alias="main"/>
<DmoClass class="BWP.B3Sale.BO.SaleOutStore_Detail, B3Sale" alias="detail"/>
<Condition>
<EQ>
<Field name="ID"/>
<Field name="SaleOutStore_ID" alias="detail"/>
</EQ>
</Condition>
</Join>
</From>
<Where>
<And>
<EQ>
<Field name="AccountingUnit_ID"/>
<QBE paramName="AccountingUnit_ID"/>
</EQ>
<EQ>
<Field name="Store_ID"/>
<QBE paramName="Store_ID"/>
</EQ>
<GreaterThanOrEqual>
<Field name="LoadTime"/>
<QBE paramName="MinLoadTime" />
</GreaterThanOrEqual>
<LessThanOrEqual>
<Field name="LoadTime"/>
<QBE paramName="MaxLoadTime"/>
</LessThanOrEqual>
</And>
</Where>
</Select>

+ 2
- 0
B3ButcherManageToSale.Web/PluginClass.cs View File

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using TSingSoft.WebPluginFramework; using TSingSoft.WebPluginFramework;
using TSingSoft.WebPluginFramework.Pages;
namespace BWP.Web.Pages namespace BWP.Web.Pages
{ {
@ -10,6 +11,7 @@ namespace BWP.Web.Pages
{ {
public void OnInit() public void OnInit()
{ {
WpfPageFactory.RegisterPageOverlay(typeof(B3ButcherManage.Tools.SaleOutStoreBalance).FullName, typeof(B3ButcherManageToSale.Overlays.SaleOutStoreBalance).FullName);
} }
} }
} }

Loading…
Cancel
Save