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.
 

320 lines
14 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;
using BWP.B3Frameworks.BO.NamedValueTemplate;
using BWP.B3Frameworks.Utils;
using BWP.B3Sale.BL;
using BWP.B3Sale.BO;
using BWP.B3Sale.Utils;
using BWP.Web.Layout;
using BWP.Web.Utils;
using BWP.Web.WebControls;
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.Security;
namespace BWP.Web.Pages.B3YunKen {
class B3YunKenSaleOutStoreToCustomerAccept : AppBasePage {
QueryContainer _queryContainer;
readonly DFInfo _dFInfo = DFInfo.Get(typeof(SaleOutStore));
DFBrowseGrid _grid;
private DFCheckBox _hideFinishedBill;
private DFEditGrid _detailGrid;
private int ActiveTabIndex {
get {
if (string.IsNullOrEmpty(Request.QueryString["index"]))
return 0;
return int.Parse(Request.QueryString["index"]);
}
}
SaleOutStore Dmo {
get { return (SaleOutStore)ViewState["Dmo"]; }
set { ViewState["Dmo"] = value; }
}
protected override void FrameworkInitialize() {
if (!BLContext.User.IsInRole("B3Sale.客户验收.新建"))
throw new AppSecurityException("你没有权限访问此页面");
base.FrameworkInitialize();
}
protected override void InitForm(HtmlForm form) {
var type = GetType();
_queryContainer = QueryContainer.FromResource(type.FullName + ".xml", type.Assembly);
form.EAdd(new PageTitle("销售出库转验收单"));
var vPanel = new VLayoutPanel();
_pageView = new ClientPageView {
TabPosition = TabPosition.Top,
};
vPanel.Add(_pageView);
_pageView.Tabs.Add(CreateSaleOutStoreTab());
_pageView.Tabs.Add(CreateCustomerAcceptTab());
form.Controls.Add(vPanel);
}
private Control CreateSaleOutStoreTab() {
var result = new ClientTab("销售出库列表");
CreateQueryPanel(result);
CreateSaleOutStoreList(result.EAdd(new TitlePanel("销售出库列表")));
return result;
}
private Control CreateCustomerAcceptTab() {
var result = new ClientTab("转验收信息");
CustomerAcceptInfo(result);
return result;
}
private DFChoiceBox _cusInput;
private ClientPageView _pageView;
private readonly DFContainer<SaleOutStore> _dFContainer = new DFContainer<SaleOutStore>();
private void CustomerAcceptInfo(ClientTab titlePanel) {
var vPanel = new VLayoutPanel();
titlePanel.Controls.Add(vPanel);
var layoutManager = new LayoutManager("main", _dFInfo, _dFContainer);
var config = new AutoLayoutConfig { Cols = 6 };
config.Add("ID");
config.Add("Customer_ID");
config.Add("AccountCustomer_Name");
config.Add("CustomerDealer_Name");
config.Add("Department_ID");
config.Add("OrderDate");
config.Add("AccountingUnit_ID");
config.Add("Employee_ID");
config.Add("LoadTime");
config.Add("Store_ID");
config.Add("Remark").ColSpan = 4;
layoutManager.Config = config;
_dFContainer.Readonly = true;
var buildButton = new TSButton();
buildButton.Text = "创建客户验收单";
vPanel.Add(layoutManager.CreateLayout());
var hPanel = vPanel.Add(new HLayoutPanel());
hPanel.Add(buildButton);
hPanel.Add(new SimpleLabel("验收日期"));
var dateInput = hPanel.Add(new DFDateInput());
dateInput.Value = BLContext.Today;
hPanel.Add(new SimpleLabel("客户"));
_cusInput = hPanel.Add(new DFChoiceBox());
_cusInput.EnableInputArgument = true;
_cusInput.DataKind = B3SaleDataSources.;
_cusInput.EnableTopItem = true;
_cusInput.Width = 150;
buildButton.Click += delegate {
_detailGrid.GetFromUI();
Dmo.Customer_ID = long.Parse(_cusInput.Value);
var customer = SaleUtil.GetDmoByID<Customer>(Dmo.Customer_ID.Value, "AccountCustomer_ID", "AccountCustomer_Name");
Dmo.AccountCustomer_ID = customer.AccountCustomer_ID;
Dmo.AccountCustomer_Name = customer.AccountCustomer_Name;
var details = new List<SaleOutStore_Detail>();
foreach (SaleOutStore_Detail detail in _detailGrid.GetSelectedItems()) {
detail.UnitNum = detail.AcceptUnitNum;
detail.SecondNumber = detail.AcceptSecondNumber;
details.Add(detail);
}
BIFactory.Create<ISaleOutStoreBL>().CreateCustomerAccept(Dmo,details);
AspUtil.Alert(this, BIFactory.GetLastMessage());
InitDmo();
_pageView.ActiveTabIndex = 0;
};
var detailEditor = new DFCollectionEditor<SaleOutStore_Detail>(() => Dmo.Details);
detailEditor.IsEditableFunc = (field, detail) => true;
detailEditor.CanSelectFunc = (detail) => true;
_detailGrid = vPanel.Add(new DFEditGrid(detailEditor) { Width = Unit.Percentage(100) });
_detailGrid.ShowLineNo = true;
_detailGrid.MultiSelectionEnabled = true;
_detailGrid.Columns.Add(new DFEditGridColumn<DFValueLabel>("Goods_Name"));
_detailGrid.Columns.Add(new DFEditGridColumn<DFValueLabel>("Goods_Spec"));
_detailGrid.Columns.EAdd(new DFEditGridColumn<DFValueLabel>("SecondNumber")).SumMode = SumMode.Sum;
_detailGrid.Columns.Add(new DFEditGridColumn<DFValueLabel>("Goods_SecondUnit"));
_detailGrid.Columns.EAdd(new DFEditGridColumn<DFValueLabel>("UnitNum")).SumMode = SumMode.Sum;
var unitColumn = new DFEditGridColumn<DFValueLabel>("Unit");
_detailGrid.Columns.Add(unitColumn);
_detailGrid.Columns.Add(new DFEditGridColumn<DFValueLabel>("Price"));
_detailGrid.Columns.EAdd(new DFEditGridColumn<DFValueLabel>("Money")).SumMode = SumMode.Sum;
_detailGrid.Columns.EAdd(new DFEditGridColumn<DFValueLabel>("AlreadyAcceptSecondNumber")).SumMode = SumMode.Sum;
_detailGrid.Columns.EAdd(new DFEditGridColumn<DFValueLabel>("AlreadyAcceptUnitNum")).SumMode = SumMode.Sum;
_detailGrid.Columns.EAdd(new DFEditGridColumn<DFTextBox>("AcceptSecondNumber")).SumMode = SumMode.Sum;
_detailGrid.Columns.EAdd(new DFEditGridColumn<DFTextBox>("AcceptUnitNum")).SumMode = SumMode.Sum;
_detailGrid.ValueColumns.Add("SaleGoods_ID");
_detailGrid.ValueColumns.Add("Goods_UnitConvertDirection");
_detailGrid.ValueColumns.Add("Goods_MainUnitRatio");
_detailGrid.ValueColumns.Add("Goods_SecondUnitRatio");
_detailGrid.ValueColumns.Add("LeftRatio");
_detailGrid.ValueColumns.Add("RightRatio");
new MainToSecondConvertRowMangerWithMoneyChange(_detailGrid, "AcceptUnitNum", "AcceptSecondNumber");
}
private void InitDmo() {
Dmo = new SaleOutStore();
_dFContainer.DFObject = Dmo;
_dFContainer.ApplyToUI();
_detailGrid.DataBind();
_grid.DataBind();
}
private void CreateSaleOutStoreList(TitlePanel titlePanel) {
_grid = titlePanel.EAdd(new DFBrowseGrid(new DFDataTableEditor()) {
Width = Unit.Percentage(100),
});
_grid.Columns.EAdd(new DFBrowseGridColumn("ID"));
_grid.Columns.EAdd(new DFBrowseGridColumn("Order_ID"));
_grid.Columns.EAdd(new DFBrowseGridColumn("OrderDate"));
_grid.Columns.EAdd(new DFBrowseGridColumn("LoadTime"));
_grid.Columns.EAdd(new DFBrowseGridColumn("AccountingUnit_Name"));
_grid.Columns.EAdd(new DFBrowseGridColumn("Customer_Name"));
_grid.Columns.EAdd(new DFBrowseGridColumn("Department_Name"));
_grid.Columns.EAdd(new DFBrowseGridColumn("Employee_Name"));
_grid.Columns.EAdd(new DFBrowseGridColumn("SaleKind_Name"));
_grid.Columns.EAdd(new DFBrowseGridColumn("Store_Name"));
_grid.Columns.EAdd(new DFBrowseGridColumn("AllUnitNum")).SumMode = SumMode.Sum;
_grid.Columns.EAdd(new DFBrowseGridColumn("Money")).SumMode = SumMode.Sum;
_grid.Columns.EAdd(new DFBrowseGridColumn("已验收数量")).SumMode = SumMode.Sum;
_grid.Columns.EAdd(new DFBrowseGridColumn("Remark"));
_grid.SingleSelection += GridSingleSelection;
}
private void GridSingleSelection(object sender, DFBrowseGridItemEventArgs e) {
var bl = BIFactory.Create<ISaleOutStoreBL>();
var id = (long)e.Row["ID"];
Dmo = bl.Load(id);
var dom = new DmoQuery(typeof(SaleOutStore_DetailToCustomerAcceptNumber));
dom.Where.Conditions.Add(DQCondition.EQ("SaleOutStore_ID", id));
var list = dom.EExecuteList();
foreach (SaleOutStore_DetailToCustomerAcceptNumber d in list) {
var detail = Dmo.Details.FirstOrDefault(x => x.ID == d.SaleOutStore_Detail_ID);
if (detail != null) {
detail.AlreadyAcceptUnitNum = d.AlreadyAcceptUnitNum;
detail.AlreadyAcceptNumber = d.AlreadyAcceptNumber;
detail.AlreadyAcceptSecondNumber = d.AlreadyAcceptSecondNumber;
}
}
foreach (var detail in Dmo.Details) {
detail.AcceptNumber = detail.Number - (detail.AlreadyAcceptNumber ?? 0);
detail.AcceptUnitNum = detail.UnitNum - (detail.AlreadyAcceptUnitNum ?? 0);
detail.AcceptSecondNumber = detail.SecondNumber - (detail.AlreadyAcceptSecondNumber ?? 0);
}
_cusInput.Value = Dmo.Customer_ID.ToString();
_cusInput.DisplayValue = Dmo.Customer_Name;
_cusInput.CodeArgument = Dmo.Customer_ID.ToString();
_dFContainer.DFObject = Dmo;
_dFContainer.ApplyToUI();
_pageView.ActiveTabIndex = 1;
_detailGrid.DataBind();
}
private void CreateQueryPanel(ClientTab titlePanel) {
var layer = new LayoutManager("", _dFInfo, _queryContainer);
layer.Add("ID", QueryCreator.DFTextBox(_dFInfo.Fields["ID"]));
layer.Add("OrderDate", QueryCreator.TimeRange(_dFInfo.Fields["OrderDate"], _queryContainer, "MinOrderDate", "MaxOrderDate"));
layer.Add("LoadTime", QueryCreator.TimeRange(_dFInfo.Fields["LoadTime"], _queryContainer, "MinLoadTime", "MaxLoadTime"));
DFChoiceBox accInput;
layer.Add("AccountingUnit_ID", accInput = QueryCreator.DFChoiceBox(_dFInfo.Fields["AccountingUnit_ID"], B3FrameworksConsts.DataSources.));
layer.Add("Department_ID", QueryCreator.DFChoiceBox(_dFInfo.Fields["Department_ID"], B3FrameworksConsts.DataSources.));
layer.Add("Employee_ID", QueryCreator.DFChoiceBox(_dFInfo.Fields["Employee_ID"], B3FrameworksConsts.DataSources.));
layer.Add("Customer_ID", QueryCreator.DFChoiceBox(_dFInfo.Fields["Customer_ID"], B3SaleDataSources.));
DFChoiceBox storeInput;
layer.Add("Store_ID", storeInput = QueryCreator.DFChoiceBox(_dFInfo.Fields["Store_ID"], B3FrameworksConsts.DataSources.));
storeInput.CodeArgumentReferenceTo = accInput;
layer.Add("Car", QueryCreator.DFTextBox(_dFInfo.Fields["Car"]));
layer.CreateDefaultConfig(8);
titlePanel.Controls.Add(layer.CreateLayout());
var hPanel = titlePanel.EAdd(new HLayoutPanel());
_hideFinishedBill = new DFCheckBox {
Text = "隐藏已转单据",
Checked = true
};
hPanel.Add(new TSButton("开始查询", delegate { StartQuery(); }));
hPanel.Add(new RedirectTSButton("清除条件"));
hPanel.Add(_hideFinishedBill);
}
private void StartQuery() {
_grid.Reset();
_grid.Query = GetQueryDom();
_grid.DataBind();
}
private DQueryDom GetQueryDom() {
var query = _queryContainer.Build();
var aready = new JoinAlias(typeof(AreadyTo));
var bill = query.From.RootSource.Alias;
query.RegisterQueryTable(typeof(AreadyTo), new string[] { "ID", "AlreadyAcceptUnitNum" }, AreadyTo.Get());
query.From.AddJoin(JoinType.Left, new DQDmoSource(aready), DQCondition.EQ(bill, "ID", aready, "ID"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Field(aready, "AlreadyAcceptUnitNum"), "已验收数量"));
if (_hideFinishedBill.Checked) {
query.Where.Conditions.Add(
DQCondition.LessThan(
DQExpression.IfNull(DQExpression.Field(aready, "AlreadyAcceptUnitNum"), DQExpression.ConstValue(0)),
DQExpression.Field(bill, "AllUnitNum")));
} else {
query.Columns.Add(DQSelectColumn.Field("CustomerAcceptID"));
}
query.Where.Conditions.Add(DQCondition.EQ("BillState", .));
query.Where.Conditions.Add(DQCondition.EQ("Domain_ID", DomainContext.Current.ID));
return query;
}
protected override void OnLoad(EventArgs e) {
base.OnLoad(e);
if (!IsPostBack)
StartQuery();
}
class AreadyTo {
public long ID { get; set; }
[LogicName("已转验收报价数量")]
public Money<decimal>? AlreadyAcceptUnitNum { get; set; }
public static DQueryDom Get() {
var dom = new DQueryDom(new JoinAlias(typeof(SaleOutStore_DetailToCustomerAcceptNumber)));
dom.Columns.Add(DQSelectColumn.Field("SaleOutStore_ID"));
dom.GroupBy.Expressions.Add(DQExpression.Field("SaleOutStore_ID"));
dom.Columns.Add(DQSelectColumn.Sum("AlreadyAcceptUnitNum"));
return dom;
}
}
}
}