| @ -0,0 +1,410 @@ | |||
| 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.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; | |||
| namespace BWP.Web.Pages.B3YunKen.SaleForecastUpdateList_ { | |||
| class SaleForecastUpdateEdit : AppBasePage { | |||
| long? SaleGoods_ID { | |||
| get { | |||
| if (string.IsNullOrEmpty(Request.QueryString["SaleGoods_ID"])) | |||
| return null; | |||
| return long.Parse(Request.QueryString["SaleGoods_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"]); | |||
| } | |||
| } | |||
| SaleForecastUpdateList.EnumGroupKey GroupKey { | |||
| get { | |||
| if (ViewState["GroupKey"] == null) { | |||
| if (!string.IsNullOrEmpty(Request.QueryString["GroupKey"])) { | |||
| SaleForecastUpdateList.EnumGroupKey e; | |||
| if (Enum.TryParse(Request.QueryString["GroupKey"], out e)) | |||
| ViewState["GroupKey"] = e; | |||
| } else { | |||
| ViewState["GroupKey"] = SaleForecastUpdateList.EnumGroupKey.按产品汇总; | |||
| } | |||
| } | |||
| return (SaleForecastUpdateList.EnumGroupKey)ViewState["GroupKey"]; | |||
| } | |||
| set { ViewState["GroupKey"] = value; } | |||
| } | |||
| public List<SaleForecast_Detail> Details { | |||
| get { | |||
| if (ViewState["Details"] == null) | |||
| ViewState["Details"] = new List<SaleForecast_Detail>(); | |||
| return (List<SaleForecast_Detail>)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(SaleForecast)); | |||
| private Label _l1, _l2; | |||
| private DFContainer _dfContainer; | |||
| protected override void InitForm(HtmlForm form) { | |||
| _queryContainer = QueryContainer.FromResource(typeof(SaleForecastUpdateList).FullName + ".xml", GetType().Assembly); | |||
| QueryCreator.TimeRange(DFInfo.Fields["Date"], _queryContainer, "MinDate", "MaxDate", 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 hpanel = new HLayoutPanel(); | |||
| hpanel.Add(new LiteralControl(string.Format("<h2>产品:{0}</h2>", Goods_Name))); | |||
| vPanel.Add(hpanel); | |||
| var panel = new HLayoutPanel(); | |||
| 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<SaleForecast_Detail>(() => 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); | |||
| if (GroupKey == SaleForecastUpdateList.EnumGroupKey.按产品汇总) { | |||
| _goodsGrid.Columns.Add(new DFEditGridColumn<DFValueLabel>("Customer_Name")); | |||
| } | |||
| _goodsGrid.ShowLineNo = true; | |||
| _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<DFValueLabel>("Money")).SumMode = SumMode.Sum; | |||
| _goodsGrid.Columns.EAdd(new DFEditGridColumn<DFValueLabel>("PolicyPrice")); | |||
| _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 saveBt = vPanel.Add(new TSButton("保存"), new VLayoutOption(HorizontalAlign.Center)); | |||
| saveBt.Width = Unit.Pixel(80); | |||
| saveBt.Click += SaveBtClick; | |||
| } | |||
| void SaveBtClick(object sender, EventArgs e) { | |||
| _goodsGrid.GetFromUI(); | |||
| var groupByOrderID = Details.GroupBy(x => x.SaleForecast_ID); | |||
| var bl = BIFactory.Create<ISaleForecastBL>(); | |||
| 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(SaleForecast_Detail)); | |||
| var goodsPropertyCatalog = new JoinAlias(typeof(GoodsPropertyCatalog)); | |||
| var goodsProperty = new JoinAlias(typeof(GoodsProperty)); | |||
| var goods = new JoinAlias(typeof(SaleGoods)); | |||
| dom.From.AddJoin(JoinType.Inner, new DQDmoSource(detailAlias), | |||
| DQCondition.EQ(order, "ID", detailAlias, "SaleForecast_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.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("SaleForecast_ID", detailAlias)); | |||
| if (SaleGoods_ID != null) { | |||
| dom.Where.Conditions.Add(DQCondition.EQ(detailAlias, "SaleGoods_ID", SaleGoods_ID)); | |||
| } | |||
| if (AccountingUnit_ID != null) { | |||
| dom.Where.Conditions.Add(DQCondition.EQ(order, "AccountingUnit_ID", AccountingUnit_ID)); | |||
| } | |||
| if ( SelectAccountingUnit_ID != null) { | |||
| dom.Where.Conditions.Add(DQCondition.EQ(order, "AccountingUnit_ID", SelectAccountingUnit_ID)); | |||
| } | |||
| if (Customer_ID != null) { | |||
| dom.Where.Conditions.Add(DQCondition.EQ(order, "Customer_ID", Customer_ID)); | |||
| } | |||
| if (SelectCustomer_ID != null) { | |||
| dom.Where.Conditions.Add(DQCondition.EQ(order, "Customer_ID", SelectCustomer_ID)); | |||
| } | |||
| if (SelectStore_ID != null) { | |||
| dom.Where.Conditions.Add(DQCondition.EQ(order, "Store_ID", SelectStore_ID)); | |||
| } | |||
| if (!string.IsNullOrEmpty(SelectGoodsPropertyCatalog_Name)) { | |||
| var strs = B3SaleWebUtil.GetDeepByTreeName(SelectGoodsPropertyCatalog_Name); | |||
| dom.Where.Conditions.Add(DQCondition.EQ(goodsPropertyCatalog, "TreeDeep" + strs[0] + "ID", SelectGoodsPropertyCatalog_ID)); | |||
| } | |||
| if (SelectGoodsProperty_ID!=null) { | |||
| dom.Where.Conditions.Add(DQCondition.EQ(goodsProperty, "ID", SelectGoodsProperty_ID)); | |||
| } | |||
| dom.Where.Conditions.Add(DQCondition.EQ("BillState", 单据状态.未审核)); | |||
| OrganizationUtil.AddOrganizationLimit(dom, typeof(SaleForecast)); | |||
| Details.Clear(); | |||
| using (var context = new TransactionContext()) { | |||
| using (var reader = context.Session.ExecuteReader(dom)) { | |||
| while (reader.Read()) { | |||
| var detail = new SaleForecast_Detail { | |||
| 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], | |||
| SaleForecast_ID = (long)reader[10], | |||
| }; | |||
| 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(); | |||
| } | |||
| } | |||
| } | |||
| @ -0,0 +1,82 @@ | |||
| <?xml version="1.0" encoding="utf-8" ?> | |||
| <Select xmlns="urn:XDQuery"> | |||
| <Columns> | |||
| </Columns> | |||
| <From> | |||
| <DmoClass class="BWP.B3Sale.BO.SaleForecast, B3Sale"/> | |||
| </From> | |||
| <Where> | |||
| <And> | |||
| <EQ> | |||
| <Field name="ID"/> | |||
| <QBE paramName="ID"/> | |||
| </EQ> | |||
| <EQ> | |||
| <Field name="Customer_ID"/> | |||
| <QBE paramName="Customer_ID"/> | |||
| </EQ> | |||
| <Contains> | |||
| <Field name="CreateUser_Name"/> | |||
| <QBE paramName="CreateUser_Name"/> | |||
| </Contains> | |||
| <Contains> | |||
| <Field name="CheckUser_Name"/> | |||
| <QBE paramName="CheckUser_Name"/> | |||
| </Contains> | |||
| <Contains> | |||
| <Field name="DeliverAddress"/> | |||
| <QBE paramName="DeliverAddress"/> | |||
| </Contains> | |||
| <GreaterThanOrEqual> | |||
| <Field name="Date"/> | |||
| <QBE paramName="MinDate"/> | |||
| </GreaterThanOrEqual> | |||
| <LessThanOrEqual> | |||
| <Field name="Date"/> | |||
| <QBE paramName="MaxDate"/> | |||
| </LessThanOrEqual> | |||
| <GreaterThanOrEqual> | |||
| <Field name="DeliveryTime"/> | |||
| <QBE paramName="MinDeliveryTime"/> | |||
| </GreaterThanOrEqual> | |||
| <LessThanOrEqual> | |||
| <Field name="DeliveryTime"/> | |||
| <QBE paramName="MaxDeliveryTime"/> | |||
| </LessThanOrEqual> | |||
| <EQ> | |||
| <Field name="AccountingUnit_ID"/> | |||
| <QBE paramName="AccountingUnit_ID"/> | |||
| </EQ> | |||
| <EQ> | |||
| <Field name="Employee_ID"/> | |||
| <QBE paramName="Employee_ID"/> | |||
| </EQ> | |||
| <EQ> | |||
| <Field name="BillState"/> | |||
| <QBE paramName="BillState"/> | |||
| </EQ> | |||
| <EQ> | |||
| <Field name="IsLocked"/> | |||
| <QBE paramName="IsLocked"/> | |||
| </EQ> | |||
| <Contains> | |||
| <Field name="DepartmentWorkFlow_Detail_Name"/> | |||
| <QBE paramName="DepartmentWorkFlow_Detail_Name"/> | |||
| </Contains> | |||
| <EQ> | |||
| <Field name="DepartmentWorkFlowStateCategory_ID"/> | |||
| <QBE paramName="DepartmentWorkFlowStateCategory_ID"/> | |||
| </EQ> | |||
| <EQ> | |||
| <Field name="SaleKind_ID"/> | |||
| <QBE paramName="SaleKind_ID"/> | |||
| </EQ> | |||
| <EQ> | |||
| <Field name="Store_ID"/> | |||
| <QBE paramName="Store_ID"/> | |||
| </EQ> | |||
| </And> | |||
| </Where> | |||
| </Select> | |||
| @ -0,0 +1,307 @@ | |||
| using System; | |||
| using System.Collections.Generic; | |||
| using System.Web; | |||
| using System.Web.UI; | |||
| using System.Web.UI.HtmlControls; | |||
| using System.Web.UI.WebControls; | |||
| using BWP.B3Frameworks; | |||
| using BWP.B3Frameworks.BO.NamedValueTemplate; | |||
| using BWP.B3Frameworks.Utils; | |||
| using BWP.B3Sale.BO; | |||
| using BWP.B3Sale.Utils; | |||
| using BWP.B3UnitedInfos; | |||
| using BWP.B3UnitedInfos.BO; | |||
| using BWP.Web.Layout; | |||
| using BWP.Web.Utils; | |||
| using BWP.Web.WebControls; | |||
| using Forks.EnterpriseServices.DataForm; | |||
| using Forks.EnterpriseServices.DomainObjects2; | |||
| using Forks.EnterpriseServices.DomainObjects2.DQuery; | |||
| using Forks.EnterpriseServices.SqlDoms; | |||
| using TSingSoft.WebControls2; | |||
| using TSingSoft.WebPluginFramework.Controls; | |||
| namespace BWP.Web.Pages.B3YunKen.SaleForecastUpdateList_ { | |||
| class SaleForecastUpdateList : AppBasePage { | |||
| QueryContainer _queryContainer; | |||
| readonly DFInfo _dFInfo = DFInfo.Get(typeof(SaleForecast)); | |||
| private DFChoiceBox _goodsPropertyCatalog; | |||
| private ChoiceBox _goodsProperty; | |||
| public enum EnumGroupKey { | |||
| 按产品汇总 = 0, | |||
| 按客户汇总 = 1, | |||
| 按会计单位汇总 = 2 | |||
| } | |||
| EnumGroupKey GroupKey { | |||
| get { | |||
| if (ViewState["GroupKey"] == null) { | |||
| if (!string.IsNullOrEmpty(Request.QueryString["GroupKey"])) { | |||
| EnumGroupKey e; | |||
| if (Enum.TryParse(Request.QueryString["GroupKey"], out e)) | |||
| ViewState["GroupKey"] = e; | |||
| } else { | |||
| ViewState["GroupKey"] = EnumGroupKey.按产品汇总; | |||
| } | |||
| } | |||
| return (EnumGroupKey)ViewState["GroupKey"]; | |||
| } | |||
| set { ViewState["GroupKey"] = value; } | |||
| } | |||
| private DFChoiceBox _storeInput, _accInput, _customerInput; | |||
| protected override void InitForm(HtmlForm form) { | |||
| _queryContainer = QueryContainer.FromResource(GetType().FullName + ".xml", GetType().Assembly); | |||
| form.Controls.Add(new PageTitle("销售预报调整")); | |||
| var titlePanel = form.EAdd(new TitlePanel("BaseProperties", "查询条件")); | |||
| titlePanel.SetPageLayoutSetting(mPageLayoutManager, titlePanel.Name); | |||
| var layoutManager = new LayoutManager("main", _dFInfo, _queryContainer); | |||
| _goodsProperty = QueryCreator.DFChoiceBox(_dFInfo.Fields["ID"], B3UnitedInfosConsts.DataSources.存货属性全部); | |||
| layoutManager.Add("GoodsProperty_ID", new SimpleLabel("存货属性"), _goodsProperty); | |||
| layoutManager["GoodsProperty_ID"].NotAutoAddToContainer = true; | |||
| _goodsPropertyCatalog = QueryCreator.DFChoiceBox(_dFInfo.Fields["ID"], B3UnitedInfosConsts.DataSources.存货属性分类); | |||
| layoutManager.Add("GoodsPropertyCatalog_ID", new SimpleLabel("存货属性分类"), _goodsPropertyCatalog); | |||
| layoutManager["GoodsPropertyCatalog_ID"].NotAutoAddToContainer = true; | |||
| layoutManager.Add("AccountingUnit_ID", new SimpleLabel("会计单位"), _accInput = QueryCreator.DFChoiceBox(_dFInfo.Fields["AccountingUnit_ID"], B3FrameworksConsts.DataSources.授权会计单位全部), false); | |||
| layoutManager.Add("Store_ID", new SimpleLabel("仓库"), _storeInput = QueryCreator.DFChoiceBox(_dFInfo.Fields["Store_ID"], B3FrameworksConsts.DataSources.授权仓库), false); | |||
| layoutManager.Add("Customer_ID", _customerInput = QueryCreator.DFChoiceBox(_dFInfo.Fields["Customer_ID"], B3SaleDataSources.用户配置客户)); | |||
| var config = new AutoLayoutConfig(); | |||
| config.Add("Date"); | |||
| config.Add("AccountingUnit_ID"); | |||
| config.Add("Employee_ID"); | |||
| config.Add("Customer_ID"); | |||
| config.Add("Store_ID"); | |||
| config.Add("GoodsProperty_ID"); | |||
| config.Add("GoodsPropertyCatalog_ID"); | |||
| layoutManager.Config = config; | |||
| var section = mPageLayoutManager.AddSection("BaseProperties", "查询条件"); | |||
| section.ApplyLayout(layoutManager, config, mPageLayoutManager, _dFInfo); | |||
| section.SetDisplayName("GoodsProperty_ID", "存货属性"); | |||
| section.SetDisplayName("GoodsPropertyCatalog_ID", "存货属性分类"); | |||
| titlePanel.Controls.Add(layoutManager.CreateLayout()); | |||
| var tsbtn = new TSButton("开始查询"); | |||
| tsbtn.Click += delegate { | |||
| DataBindGrid(GroupKey); | |||
| }; | |||
| titlePanel.Controls.Add(tsbtn); | |||
| AddDetails(form.EAdd(new TitlePanel("预报明细", "预报明细"))); | |||
| var vPanel = new VLayoutPanel(); | |||
| form.Controls.Add(vPanel); | |||
| // addOperations(vPanel); | |||
| } | |||
| DFBrowseGrid _grid; | |||
| void AddDetails(TitlePanel tPanel) { | |||
| HLayoutPanel hPanel; | |||
| tPanel.Controls.Add(new LiteralControl("<br />")); | |||
| tPanel.Controls.Add(hPanel = new HLayoutPanel()); | |||
| var groupByGoods = hPanel.Add(new LinkButton()); | |||
| groupByGoods.Text = "按产品汇总"; | |||
| groupByGoods.Attributes["style"] = "font-size:20px"; | |||
| groupByGoods.Click += (sender, e) => DataBindGrid(EnumGroupKey.按产品汇总); | |||
| hPanel.Add(new LiteralControl(" ")); | |||
| hPanel.Add(new LiteralControl(" ")); | |||
| var groupByBuyer = hPanel.Add(new LinkButton()); | |||
| hPanel.Add(new LiteralControl(" ")); | |||
| hPanel.Add(new LiteralControl(" ")); | |||
| groupByBuyer.Text = "按客户汇总"; | |||
| groupByBuyer.Attributes["style"] = "font-size:20px"; | |||
| groupByBuyer.Click += (sender, e) => DataBindGrid(EnumGroupKey.按客户汇总); | |||
| var groupByAccountingUnit = hPanel.Add(new LinkButton()); | |||
| hPanel.Add(new LiteralControl(" ")); | |||
| hPanel.Add(new LiteralControl(" ")); | |||
| groupByAccountingUnit.Text = "按会计单位汇总"; | |||
| groupByAccountingUnit.Attributes["style"] = "font-size:20px"; | |||
| groupByAccountingUnit.Click += (sender, e) => DataBindGrid(EnumGroupKey.按会计单位汇总); | |||
| var editor = new DFDataTableEditor(); | |||
| _grid = new DFBrowseGrid(editor) { | |||
| Width = Unit.Percentage(100), | |||
| IgnoreItemsCount = true, | |||
| DFGridSetEnabled = false, | |||
| }; | |||
| _grid.Columns.Add(new DFBrowseGridAutoColumn("SaleGoods_ID", "AccountingUnit_ID", "Customer_ID")); | |||
| _grid.OnDetailDataBound = (row, obj, index) => { | |||
| var dataRow = obj as DFDataRow; | |||
| if (dataRow == null) { | |||
| return; | |||
| } | |||
| var min = (DateTime?)_queryContainer.GetInput("MinDate"); | |||
| var max = (DateTime?)_queryContainer.GetInput("MaxDate"); | |||
| var staticParameter = new List<Tuple<string, string>>(); | |||
| if (min != null) { | |||
| staticParameter.Add(new Tuple<string, string>("MinDate", min.Value.ToString("yyyy-MM-dd HH:mm"))); | |||
| } | |||
| if (max != null) { | |||
| staticParameter.Add(new Tuple<string, string>("MaxDate", max.Value.ToString("yyyy-MM-dd HH:mm"))); | |||
| } | |||
| if (!_accInput.IsEmpty) { | |||
| staticParameter.Add(new Tuple<string, string>("SelectAccountingUnit_ID", _accInput.Value)); | |||
| } | |||
| if (!_storeInput.IsEmpty) { | |||
| staticParameter.Add(new Tuple<string, string>("SelectStore_ID", _storeInput.Value)); | |||
| } | |||
| if (!_customerInput.IsEmpty) { | |||
| staticParameter.Add(new Tuple<string, string>("SelectCustomer_ID", _customerInput.Value)); | |||
| } | |||
| if (!_goodsProperty.IsEmpty) { | |||
| staticParameter.Add(new Tuple<string, string>("SelectGoodsProperty_ID", _goodsProperty.Value)); | |||
| staticParameter.Add(new Tuple<string, string>("SelectGoodsProperty_Name", _goodsProperty.DisplayValue)); | |||
| } | |||
| if (!_goodsPropertyCatalog.IsEmpty) { | |||
| staticParameter.Add(new Tuple<string, string>("SelectGoodsPropertyCatalog_ID", _goodsPropertyCatalog.Value)); | |||
| staticParameter.Add(new Tuple<string, string>("SelectGoodsPropertyCatalog_Name", _goodsPropertyCatalog.DisplayValue)); | |||
| } | |||
| var html = "OpenUrlInTopTab('{0}','调整预报');"; | |||
| var bt = new LinkButton(); | |||
| bt.Text = row.Cells[0].InnerText; | |||
| row.Cells[0].InnerHtml = ""; | |||
| row.Cells[0].Controls.Add(bt); | |||
| if (GroupKey == EnumGroupKey.按产品汇总) { | |||
| var field = "Goods"; | |||
| var idField = dataRow["SaleGoods_ID"]; | |||
| var nameField = dataRow[field + "_Name"]; | |||
| staticParameter.Add(new Tuple<string, string>("SaleGoods_ID", idField.ToString())); | |||
| staticParameter.Add(new Tuple<string, string>(field + "_Name", nameField.ToString())); | |||
| var url = AspUtil.UpdateUrlParam("SaleForecastUpdateEdit.aspx", "GroupKey", HttpUtility.UrlEncode(EnumGroupKey.按产品汇总.ToString())); | |||
| foreach (var tuple in staticParameter) { | |||
| url = AspUtil.UpdateUrlParam(url, tuple.Item1, HttpUtility.UrlEncode(tuple.Item2)); | |||
| } | |||
| bt.OnClientClick = string.Format(html, url); | |||
| } else if (GroupKey == EnumGroupKey.按会计单位汇总) { | |||
| var field = "AccountingUnit"; | |||
| var idField = dataRow[field + "_ID"]; | |||
| var nameField = dataRow[field + "_Name"]; | |||
| if (idField == null) { | |||
| AspUtil.Alert(this, "存在会计单位为空的预报!"); | |||
| return; | |||
| } | |||
| staticParameter.Add(new Tuple<string, string>(field + "_ID", idField.ToString())); | |||
| staticParameter.Add(new Tuple<string, string>(field + "_Name", nameField.ToString())); | |||
| var url = AspUtil.UpdateUrlParam("SaleForecastUpdateEdit.aspx", "GroupKey", HttpUtility.UrlEncode(EnumGroupKey.按会计单位汇总.ToString())); | |||
| foreach (var tuple in staticParameter) { | |||
| url = AspUtil.UpdateUrlParam(url, tuple.Item1, HttpUtility.UrlEncode(tuple.Item2)); | |||
| } | |||
| bt.OnClientClick = string.Format(html, url); | |||
| } else if (GroupKey == EnumGroupKey.按客户汇总) { | |||
| var field = "Customer"; | |||
| var idField = dataRow[field + "_ID"]; | |||
| var nameField = dataRow[field + "_Name"]; | |||
| staticParameter.Add(new Tuple<string, string>(field + "_ID", idField.ToString())); | |||
| staticParameter.Add(new Tuple<string, string>(field + "_Name", nameField.ToString())); | |||
| var url = AspUtil.UpdateUrlParam("SaleForecastUpdateEdit.aspx", "GroupKey", HttpUtility.UrlEncode(EnumGroupKey.按客户汇总.ToString())); | |||
| foreach (var tuple in staticParameter) { | |||
| url = AspUtil.UpdateUrlParam(url, tuple.Item1, HttpUtility.UrlEncode(tuple.Item2)); | |||
| } | |||
| bt.OnClientClick = string.Format(html, url); | |||
| } | |||
| }; | |||
| tPanel.Controls.Add(_grid); | |||
| var section = mPageLayoutManager.AddSection("Columns", "预报明细"); | |||
| section.ApplyLayout(_grid, mPageLayoutManager, _dFInfo); | |||
| } | |||
| private readonly List<int> _sumColumnsIndex = new List<int>(); | |||
| private void DataBindGrid(EnumGroupKey groupKey) { | |||
| GroupKey = groupKey; | |||
| var args = new LoadArguments(GetQueryDom(groupKey)); | |||
| foreach (var index in _sumColumnsIndex) | |||
| args.SumColumns.Add(index); | |||
| _grid.LoadArguments = args; | |||
| _grid.Reset(); | |||
| _grid.CurrentPageIndex = 0; | |||
| _grid.DataBind(); | |||
| } | |||
| private DQueryDom GetQueryDom(EnumGroupKey groupKey) { | |||
| var dom = _queryContainer.Build(); | |||
| var bill = dom.From.RootSource.Alias; | |||
| var detail = new JoinAlias("detail", typeof(SaleForecast_Detail)); | |||
| var goodsPropertyCatalog = new JoinAlias(typeof(GoodsPropertyCatalog)); | |||
| var goodsProperty = new JoinAlias(typeof(GoodsProperty)); | |||
| var goods = new JoinAlias(typeof(SaleGoods)); | |||
| dom.From.AddJoin(JoinType.Inner, new DQDmoSource(detail), | |||
| DQCondition.EQ(bill, "ID", detail, "SaleForecast_ID")); | |||
| dom.From.AddJoin(JoinType.Left, new DQDmoSource(goods), DQCondition.EQ(detail, "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")); | |||
| if (groupKey == EnumGroupKey.按产品汇总) { | |||
| dom.Columns.Add(DQSelectColumn.Field("SaleGoods_ID", detail)); | |||
| dom.Columns.Add(DQSelectColumn.Field("Goods_Name", detail)); | |||
| dom.Columns.Add(DQSelectColumn.Field("Goods_Code", detail)); | |||
| dom.Columns.Add(DQSelectColumn.Sum(detail, "UnitNum", "总报价数量")); | |||
| dom.Columns.Add(DQSelectColumn.Sum(detail, "Money", "总金额")); | |||
| _sumColumnsIndex.Add(3); | |||
| _sumColumnsIndex.Add(4); | |||
| dom.GroupBy.Expressions.Add(DQExpression.Field(detail, "Goods_Code")); | |||
| dom.GroupBy.Expressions.Add(DQExpression.Field(detail, "Goods_Name")); | |||
| dom.GroupBy.Expressions.Add(DQExpression.Field(detail, "SaleGoods_ID")); | |||
| } else if (groupKey == EnumGroupKey.按会计单位汇总) { | |||
| dom.Columns.Add(DQSelectColumn.Field("AccountingUnit_ID", bill)); | |||
| dom.Columns.Add(DQSelectColumn.Field("AccountingUnit_Name", bill)); | |||
| dom.Columns.Add(DQSelectColumn.Sum(detail, "UnitNum", "总报价数量")); | |||
| dom.Columns.Add(DQSelectColumn.Sum(detail, "Money", "总金额")); | |||
| _sumColumnsIndex.Add(2); | |||
| _sumColumnsIndex.Add(3); | |||
| dom.GroupBy.Expressions.Add(DQExpression.Field(bill, "AccountingUnit_ID")); | |||
| dom.GroupBy.Expressions.Add(DQExpression.Field(bill, "AccountingUnit_Name")); | |||
| } else if (groupKey == EnumGroupKey.按客户汇总) { | |||
| dom.Columns.Add(DQSelectColumn.Field("Customer_ID", bill)); | |||
| dom.Columns.Add(DQSelectColumn.Field("Customer_Name", bill)); | |||
| dom.Columns.Add(DQSelectColumn.Sum(detail, "UnitNum", "总报价数量")); | |||
| dom.Columns.Add(DQSelectColumn.Sum(detail, "Money", "总金额")); | |||
| _sumColumnsIndex.Add(2); | |||
| _sumColumnsIndex.Add(3); | |||
| dom.GroupBy.Expressions.Add(DQExpression.Field(bill, "Customer_ID")); | |||
| dom.GroupBy.Expressions.Add(DQExpression.Field(bill, "Customer_Name")); | |||
| } | |||
| if (!_goodsPropertyCatalog.IsEmpty) { | |||
| var strs = B3SaleWebUtil.GetDeepByTreeName(_goodsPropertyCatalog.DisplayValue); | |||
| var conditions = new List<IDQExpression>(); | |||
| var values = _goodsPropertyCatalog.GetValues(); | |||
| for (int index = 0; index < values.Length; index++) { | |||
| var value = values[index]; | |||
| conditions.Add(DQCondition.EQ(goodsPropertyCatalog, "TreeDeep" + strs[index] + "ID", value)); | |||
| } | |||
| dom.Where.Conditions.Add(DQCondition.Or(conditions)); | |||
| } | |||
| if (!_goodsProperty.IsEmpty) { | |||
| dom.Where.Conditions.Add(DQCondition.EQ(goodsProperty, "ID", long.Parse(_goodsProperty.Value))); | |||
| } | |||
| dom.Where.Conditions.Add(DQCondition.EQ("BillState", 单据状态.未审核)); | |||
| OrganizationUtil.AddOrganizationLimit(dom, typeof(SaleForecast)); | |||
| return dom; | |||
| } | |||
| protected override void OnLoad(EventArgs e) { | |||
| base.OnLoad(e); | |||
| if (!IsPostBack) { | |||
| DataBindGrid(GroupKey); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @ -0,0 +1,82 @@ | |||
| <?xml version="1.0" encoding="utf-8" ?> | |||
| <Select xmlns="urn:XDQuery"> | |||
| <Columns> | |||
| </Columns> | |||
| <From> | |||
| <DmoClass class="BWP.B3Sale.BO.SaleForecast, B3Sale"/> | |||
| </From> | |||
| <Where> | |||
| <And> | |||
| <EQ> | |||
| <Field name="ID"/> | |||
| <QBE paramName="ID"/> | |||
| </EQ> | |||
| <EQ> | |||
| <Field name="Customer_ID"/> | |||
| <QBE paramName="Customer_ID"/> | |||
| </EQ> | |||
| <Contains> | |||
| <Field name="CreateUser_Name"/> | |||
| <QBE paramName="CreateUser_Name"/> | |||
| </Contains> | |||
| <Contains> | |||
| <Field name="CheckUser_Name"/> | |||
| <QBE paramName="CheckUser_Name"/> | |||
| </Contains> | |||
| <Contains> | |||
| <Field name="DeliverAddress"/> | |||
| <QBE paramName="DeliverAddress"/> | |||
| </Contains> | |||
| <GreaterThanOrEqual> | |||
| <Field name="Date"/> | |||
| <QBE paramName="MinDate"/> | |||
| </GreaterThanOrEqual> | |||
| <LessThanOrEqual> | |||
| <Field name="Date"/> | |||
| <QBE paramName="MaxDate"/> | |||
| </LessThanOrEqual> | |||
| <GreaterThanOrEqual> | |||
| <Field name="DeliveryTime"/> | |||
| <QBE paramName="MinDeliveryTime"/> | |||
| </GreaterThanOrEqual> | |||
| <LessThanOrEqual> | |||
| <Field name="DeliveryTime"/> | |||
| <QBE paramName="MaxDeliveryTime"/> | |||
| </LessThanOrEqual> | |||
| <EQ> | |||
| <Field name="AccountingUnit_ID"/> | |||
| <QBE paramName="AccountingUnit_ID"/> | |||
| </EQ> | |||
| <EQ> | |||
| <Field name="Employee_ID"/> | |||
| <QBE paramName="Employee_ID"/> | |||
| </EQ> | |||
| <EQ> | |||
| <Field name="BillState"/> | |||
| <QBE paramName="BillState"/> | |||
| </EQ> | |||
| <EQ> | |||
| <Field name="IsLocked"/> | |||
| <QBE paramName="IsLocked"/> | |||
| </EQ> | |||
| <Contains> | |||
| <Field name="DepartmentWorkFlow_Detail_Name"/> | |||
| <QBE paramName="DepartmentWorkFlow_Detail_Name"/> | |||
| </Contains> | |||
| <EQ> | |||
| <Field name="DepartmentWorkFlowStateCategory_ID"/> | |||
| <QBE paramName="DepartmentWorkFlowStateCategory_ID"/> | |||
| </EQ> | |||
| <EQ> | |||
| <Field name="SaleKind_ID"/> | |||
| <QBE paramName="SaleKind_ID"/> | |||
| </EQ> | |||
| <EQ> | |||
| <Field name="Store_ID"/> | |||
| <QBE paramName="Store_ID"/> | |||
| </EQ> | |||
| </And> | |||
| </Where> | |||
| </Select> | |||