using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Web.UI;
|
|
using System.Web.UI.HtmlControls;
|
|
using System.Web.UI.WebControls;
|
|
using B3_DongFangWanQi.BO;
|
|
using BWP.B3Frameworks;
|
|
using BWP.B3Frameworks.BO;
|
|
using BWP.B3Frameworks.BO.MoneyTemplate;
|
|
using BWP.B3Frameworks.BO.NamedValueTemplate;
|
|
using BWP.B3Frameworks.Utils;
|
|
using BWP.B3Sale.BL;
|
|
using BWP.B3Sale.BO;
|
|
using BWP.B3Sale.Utils;
|
|
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;
|
|
using TSingSoft.WebPluginFramework.Controls;
|
|
using TSingSoft.WebPluginFramework.Pages;
|
|
using BWP.B3UnitedInfos.BL;
|
|
using B3_DongFangWanQi.BL;
|
|
|
|
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, _tzNumber, txtRealStoreNumber;
|
|
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("预计牛头数"));
|
|
_tzNumber = new Label();
|
|
_tzNumber.Font.Size = 12;
|
|
_tzNumber.Font.Bold = true;
|
|
_tzNumber.Width = 180;
|
|
var date = Request.QueryString["date"];
|
|
if (!string.IsNullOrEmpty(date))
|
|
_tzNumber.Text = string.Format("{0}头({1})", Request.QueryString["mainNumber"], date);
|
|
else
|
|
{
|
|
_tzNumber.Text = string.Format("{0}头 ", Request.QueryString["mainNumber"]);
|
|
}
|
|
panel.Add(_tzNumber);
|
|
|
|
panel.Add(new SimpleLabel("当前牛头数产值"));
|
|
var label2 = new Label();
|
|
label2.Font.Size = 14;
|
|
label2.Width = 120;
|
|
label2.Font.Bold = true;
|
|
label2.Text = Request.QueryString["currentNumber"].ToString();
|
|
panel.Add(label2);
|
|
|
|
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("实际库存"));
|
|
txtRealStoreNumber = new Label();
|
|
txtRealStoreNumber.ID = "txtRealStoreNumber";
|
|
txtRealStoreNumber.Font.Size = 14;
|
|
txtRealStoreNumber.Font.Bold = true;
|
|
txtRealStoreNumber.Width = 120;
|
|
panel.Add(txtRealStoreNumber);
|
|
|
|
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("预计剩余数量"));
|
|
_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>("Goods_Code"));
|
|
_goodsGrid.Columns.Add(new DFEditGridColumn<DFValueLabel>("Goods_Name"));
|
|
|
|
_goodsGrid.Columns.Add(new DFEditGridColumn<DFValueLabel>("Goods_Spec"));
|
|
|
|
var col = new DFEditGridColumn<DFTextBox>("UnitNum");
|
|
col.InitEditControl += (sender, e) => {
|
|
e.Control.Attributes["onchange"] = @"SetSumInfo();this.dfContainer.setValue('ChangeFlag','true'); ";
|
|
|
|
};
|
|
_goodsGrid.Columns.EAdd(col).SumMode = SumMode.Sum;
|
|
|
|
_goodsGrid.Columns.Add(new DFEditGridColumn<DFValueLabel>("Unit"));
|
|
_goodsGrid.Columns.EAdd(new DFEditGridColumn<DFValueLabel>("SecondNumber")).SumMode = SumMode.Sum;
|
|
_goodsGrid.Columns.Add(new DFEditGridColumn<DFValueLabel>("Goods_SecondUnit"));
|
|
_goodsGrid.Columns.Add(new DFEditGridColumn<DFValueLabel>("Price"));
|
|
|
|
_goodsGrid.Columns.Add(new DFEditGridColumn<DFValueLabel>("LoadTime"));
|
|
_goodsGrid.Columns.Add(new DFEditGridColumn<DFValueLabel>("OrderDate"));
|
|
//_goodsGrid.Columns.Add(new DFEditGridColumn<DFTextBox>("ChangeFlag"));
|
|
_goodsGrid.Columns.Add(new DFEditGridColumn<DFValueLabel>("Remark"));
|
|
|
|
_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("Price");
|
|
_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(" "));
|
|
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.Where(x => !string.IsNullOrEmpty(x.ChangeFlag)).GroupBy(x => x.Order_ID);
|
|
|
|
var bl = BIFactory.Create<IOrderBL>();
|
|
var gbl = BIFactory.Create<IGoodsPropertyBL>();
|
|
var soa = BIFactory.Create<ISaleOrderAdjustNumberBL>();
|
|
var cannotUpdateID = new List<long>();
|
|
var updateIDs = new List<long>();
|
|
long GoodsProperty_ID = 0;
|
|
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;
|
|
}
|
|
GoodsProperty_ID = (long)detail.GoodsProperty_ID;
|
|
}
|
|
|
|
if (changed) {
|
|
if (order.BillState != 单据状态.未审核) {
|
|
cannotUpdateID.Add(order.ID);
|
|
continue;
|
|
}
|
|
bl.Update(order);
|
|
updateIDs.Add(order.ID);
|
|
}
|
|
}
|
|
var AdjustNumber = GetQuery(GoodsProperty_ID);
|
|
if (AdjustNumber != null)
|
|
{
|
|
AdjustNumber.AdjustNumber += 1;
|
|
soa.Update(AdjustNumber);
|
|
}
|
|
else
|
|
{
|
|
AdjustNumber = new SaleOrderAdjustNumber() { GoodsProperty_ID = GoodsProperty_ID, AdjustNumber = 1};
|
|
soa.Insert(AdjustNumber);
|
|
}
|
|
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();
|
|
}
|
|
|
|
static SaleOrderAdjustNumber GetQuery(long goodsPropertyId)
|
|
{
|
|
var dom = new DmoQuery(typeof(SaleOrderAdjustNumber));
|
|
dom.Where.Conditions.Add(DQCondition.EQ("GoodsProperty_ID", goodsPropertyId));
|
|
var r = dom.EExecuteScalar<SaleOrderAdjustNumber>();
|
|
return r;
|
|
}
|
|
|
|
protected override void OnLoad(EventArgs e) {
|
|
base.OnLoad(e);
|
|
if (!IsPostBack) {
|
|
BindGrid();
|
|
}
|
|
}
|
|
protected override void OnPreRender(EventArgs e) {
|
|
base.OnPreRender(e);
|
|
var pageIndex = _goodsGrid.CurrentPageIndex;
|
|
var size = _goodsGrid.PageSize;
|
|
var index = 0;
|
|
Money<decimal> unitNum = 0;
|
|
var number = decimal.Parse(Request.QueryString["number"]);
|
|
foreach (var detail in Details) {
|
|
detail.Money = detail.UnitNum * detail.Price;
|
|
var begin = size * pageIndex;
|
|
var end = Math.Min(Details.Count, (pageIndex + 1) * size);
|
|
if (index < begin || index > end - 1) {
|
|
unitNum += (detail.UnitNum ?? 0);
|
|
}
|
|
index++;
|
|
}
|
|
var s = string.Format(@"<script language=javascript>
|
|
var sumUnitNumOtherPage = {0};
|
|
var sumleftOtherPage = {1};
|
|
</script>", unitNum, number.ToString("0.00"));
|
|
Page.ClientScript.RegisterClientScriptBlock(GetType(), "OtherPageNumber", s, false);
|
|
|
|
var script = @"
|
|
<script language=javascript>
|
|
document.getElementById('{allUnitNumlabel}').innerText = {sumUnitNum};
|
|
document.getElementById('{allleftlabel}').innerText = {sumleft};
|
|
function SetSumInfo() {
|
|
var grid = __DFContainer.getControl('$Grid');
|
|
var sumNum = sumUnitNumOtherPage;
|
|
var itemEndIndex = grid.behind.mItemEndIndex - 1;
|
|
for (i = 1; i <= itemEndIndex; i++) {
|
|
var num = grid.rows[i].dfContainer.getValue('UnitNum');
|
|
var price = grid.rows[i].dfContainer.getValue('Price');
|
|
grid.rows[i].dfContainer.setValue('Money',accMul(num,price).toFixed(2));
|
|
if (num != null && num != '') {
|
|
sumNum = sumNum + 1 * num;
|
|
|
|
}
|
|
}
|
|
sumleft = sumleftOtherPage - sumNum;
|
|
document.getElementById('{allUnitNumlabel}').innerText = sumNum;
|
|
document.getElementById('{allleftlabel}').innerText = sumleft.toFixed(2);
|
|
}
|
|
</script>";
|
|
script = script.Replace("{GridID}", _goodsGrid.ClientID);
|
|
script = script.Replace("{allUnitNumlabel}", _l1.ClientID);
|
|
script = script.Replace("{allleftlabel}", _l2.ClientID);
|
|
script = script.Replace("{sumUnitNum}", Details.Sum(x => (x.UnitNum ?? 0).Value).ToString());
|
|
script = script.Replace("{sumleft}", (number - Details.Sum(x => (x.UnitNum ?? 0).Value)).ToString("0.00"));
|
|
|
|
Page.ClientScript.RegisterStartupScript(this.GetType(), "Startup", script);
|
|
|
|
}
|
|
|
|
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));
|
|
//var storeDetail = new JoinAlias(typeof(StoreDetailTmp));
|
|
//var output = new JoinAlias(typeof(OutputTmp));
|
|
var flowdetail = new JoinAlias("flowdetail", typeof(DepartmentWorkFlow_Detail));
|
|
|
|
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"));
|
|
|
|
dom.From.AddJoin(JoinType.Left, new DQDmoSource(flowdetail), DQCondition.EQ(order, "DepartmentWorkFlow_Detail_ID", flowdetail, "ID"));
|
|
|
|
OrganizationUtil.RegisterOrganizationQueryTable(dom);
|
|
|
|
|
|
//dom.RegisterQueryTable(typeof(StoreDetailTmp), new[] { "GoodsProperty_ID", "Number", "SecondNumber" }, GetStoreDetailDQueryDom());
|
|
//dom.RegisterQueryTable(typeof(OutputTmp), new[] { "GoodsProperty_ID", "Number" }, GetOutputDQueryDom());
|
|
//dom.From.AddJoin(JoinType.Left, new DQDmoSource(storeDetail), DQCondition.EQ(goodsProperty, "ID", storeDetail, "GoodsProperty_ID"));
|
|
//dom.From.AddJoin(JoinType.Left, new DQDmoSource(output), DQCondition.EQ(goodsProperty, "ID", output, "GoodsProperty_ID"));
|
|
|
|
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));
|
|
dom.Columns.Add(DQSelectColumn.Field("Goods_SecondUnit", detailAlias));
|
|
dom.Columns.Add(DQSelectColumn.Field("Remark", detailAlias));
|
|
//dom.Columns.Add(DQSelectColumn.Create(DQExpression.Field(storeDetail, "Number").EAdd(DQExpression.Field(output, "Number")), "Number1"));
|
|
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],
|
|
Goods_SecondUnit = (string)reader[15],
|
|
Remark = (string)reader[16]
|
|
};
|
|
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(decimal.Parse(Request.QueryString["number"]) - Details.Sum(x => (decimal?)(x.UnitNum) ?? 0), 2).ToString();
|
|
txtRealStoreNumber.Text = GetSumRealStoreNumber(Details);
|
|
}
|
|
|
|
private string GetSumRealStoreNumber(List<Order_DetailExt> details)
|
|
{
|
|
var join=new JoinAlias(typeof(StoreDetail));
|
|
var query = new DQueryDom(join);
|
|
query.Columns.Add(DQSelectColumn.Sum("Number"));
|
|
query.Where.Conditions.Add(DQCondition.InList(DQExpression.Field("Goods_ID"), details.Select(x=>DQExpression.Value(x.SaleGoods_ID)).ToArray()));
|
|
var dd = query.EExecuteScalar<Money<decimal>?>();
|
|
return dd == null ? "0":dd.ToString();
|
|
}
|
|
|
|
[DFClass, Serializable]
|
|
class Order_DetailExt : Order_Detail {
|
|
[LogicName("发货时间")]
|
|
public DateTime? LoadTime { get; set; }
|
|
|
|
[LogicName("订货时间")]
|
|
public DateTime? OrderDate { get; set; }
|
|
|
|
[LogicName("预计库存")]
|
|
public Money<decimal>? Number1 { get; set; }
|
|
|
|
|
|
[LogicName(" ")]
|
|
[NonDmoProperty]
|
|
[DFExtProperty("Width", "1px")]
|
|
public string ChangeFlag { get; set; }
|
|
}
|
|
|
|
class StoreDetailTmp {
|
|
public long GoodsProperty_ID { get; set; }
|
|
public long Goods_ID { get; set; }
|
|
[LogicName("主数量")]
|
|
public Money<decimal>? Number { get; set; }
|
|
|
|
[LogicName("辅数量")]
|
|
public Money<decimal>? SecondNumber { get; set; }
|
|
|
|
}
|
|
|
|
class OutputTmp {
|
|
public long GoodsProperty_ID { get; set; }
|
|
public long Goods_ID { get; set; }
|
|
[LogicName("主数量")]
|
|
public Money<decimal>? Number { get; set; }
|
|
|
|
[LogicName("辅数量")]
|
|
public Money<decimal>? SecondNumber { get; set; }
|
|
|
|
}
|
|
DQueryDom GetStoreDetailDQueryDom() {
|
|
var storeDetail = new JoinAlias(typeof(StoreDetail));
|
|
var store = new JoinAlias(typeof(Store));
|
|
var query = new DQueryDom(storeDetail);
|
|
var goodsProperty = new JoinAlias("_s2", typeof(GoodsProperty));
|
|
var goods = new JoinAlias("_s3", typeof(SaleGoods));
|
|
|
|
query.From.AddJoin(JoinType.Left, new DQDmoSource(goods), DQCondition.EQ(storeDetail, "Goods_ID", goods, "ID"));
|
|
query.From.AddJoin(JoinType.Left, new DQDmoSource(goodsProperty), DQCondition.EQ(goodsProperty, "ID", goods, "GoodsProperty_ID"));
|
|
|
|
if (GoodsProperty_ID != null) {
|
|
query.Where.Conditions.Add(DQCondition.EQ(goodsProperty, "ID", GoodsProperty_ID));
|
|
}
|
|
|
|
query.From.AddJoin(JoinType.Left, new DQDmoSource(store), DQCondition.EQ(store, "ID", storeDetail, "Store_ID"));
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("ID", goodsProperty));
|
|
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.Field("Number")), "主数量"));
|
|
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.Field("SecondNumber")), "主数量"));
|
|
|
|
query.GroupBy.Expressions.Add(DQExpression.Field(goodsProperty, "ID"));
|
|
|
|
query.Where.Conditions.Add(DQCondition.EQ(store, "Domain_ID", DomainContext.Current.ID));
|
|
|
|
return query;
|
|
}
|
|
|
|
DQueryDom GetOutputDQueryDom() {
|
|
var dom = new DQueryDom(new JoinAlias(typeof(OutputForecast)));
|
|
dom.Columns.Add(DQSelectColumn.Max("ID"));
|
|
dom.Where.Conditions.Add(DQCondition.EQ("Domain_ID", DomainContext.Current.ID));
|
|
dom.EAddCheckedCondition(dom.From.RootSource.Alias);
|
|
var id = dom.EExecuteScalar<long?>() ?? 0;
|
|
|
|
var detail = new JoinAlias(typeof(OutputForecast_Detail));
|
|
var bill = new JoinAlias(typeof(OutputForecast));
|
|
var goodsProperty = new JoinAlias("_s5", typeof(GoodsProperty));
|
|
|
|
var query = new DQueryDom(detail);
|
|
query.From.AddJoin(JoinType.Inner, new DQDmoSource(bill),
|
|
DQCondition.EQ(bill, "ID", detail, "OutputForecast_ID"));
|
|
|
|
query.From.AddJoin(JoinType.Left, new DQDmoSource(goodsProperty), DQCondition.EQ(goodsProperty, "ID", detail, "GoodsProperty_ID"));
|
|
|
|
if (GoodsProperty_ID != null) {
|
|
query.Where.Conditions.Add(DQCondition.EQ(goodsProperty, "ID", GoodsProperty_ID));
|
|
}
|
|
|
|
query.Columns.Add(DQSelectColumn.Field("GoodsProperty_ID"));
|
|
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.Field("Number")), "主数量"));
|
|
|
|
query.GroupBy.Expressions.Add(DQExpression.Field("GoodsProperty_ID"));
|
|
query.Where.Conditions.Add(DQCondition.EQ(bill, "ID", id));
|
|
query.Where.Conditions.Add(DQCondition.GreaterThan(detail, "GoodsProperty_ID", 0));
|
|
return query;
|
|
}
|
|
}
|
|
}
|