diff --git a/B3_YunKen.sln b/B3_YunKen.sln
index a3b9f89..71f37c8 100644
--- a/B3_YunKen.sln
+++ b/B3_YunKen.sln
@@ -1,6 +1,6 @@
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BWP.B3_YunKen", "BWP.B3_YunKen\BWP.B3_YunKen.csproj", "{42F13AF3-93F9-4BAF-9CC5-8F62802AD378}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BWP.B3_YunKen.Web", "BWP.B3_YunKen.Web\BWP.B3_YunKen.Web.csproj", "{E1923EA0-A58E-407B-B90C-837DAB197495}"
@@ -8,7 +8,7 @@ EndProject
Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "WebFolder", "WebFolder\", "{E6C7C6E1-BDF9-4687-913A-28D0365EBA18}"
ProjectSection(WebsiteProperties) = preProject
TargetFrameworkMoniker = ".NETFramework,Version%3Dv4.0"
- ProjectReferences = "{e1923ea0-a58e-407b-b90c-837dab197495}|BWP.B3_YunKen.Web.dll;"
+ ProjectReferences = "{e1923ea0-a58e-407b-b90c-837dab197495}|B3_YunKen.Web.dll;{42F13AF3-93F9-4BAF-9CC5-8F62802AD378}|B3_YunKen.dll;"
Debug.AspNetCompiler.VirtualPath = "/WebFolder"
Debug.AspNetCompiler.PhysicalPath = "WebFolder\"
Debug.AspNetCompiler.TargetPath = "PrecompiledWeb\WebFolder\"
diff --git a/BWP.B3_YunKen.Web/BWP.B3_YunKen.Web.csproj b/BWP.B3_YunKen.Web/BWP.B3_YunKen.Web.csproj
index 6b75a91..40d4606 100644
--- a/BWP.B3_YunKen.Web/BWP.B3_YunKen.Web.csproj
+++ b/BWP.B3_YunKen.Web/BWP.B3_YunKen.Web.csproj
@@ -84,6 +84,12 @@
ASPXCodeBehind
+
+ ASPXCodeBehind
+
+
+ ASPXCodeBehind
+
ASPXCodeBehind
@@ -93,7 +99,9 @@
ASPXCodeBehind
-
+
+ ASPXCodeBehind
+
ASPXCodeBehind
diff --git a/BWP.B3_YunKen.Web/Pages/B3YunKen/Bill/GoodsPackageDetailSet.cs b/BWP.B3_YunKen.Web/Pages/B3YunKen/Bill/GoodsPackageDetailSet.cs
new file mode 100644
index 0000000..130d6e0
--- /dev/null
+++ b/BWP.B3_YunKen.Web/Pages/B3YunKen/Bill/GoodsPackageDetailSet.cs
@@ -0,0 +1,386 @@
+using BWP.B3_YunKen.BO;
+using BWP.B3Frameworks.BO;
+using BWP.B3Sale.BL;
+using BWP.B3Sale.BO;
+using BWP.B3UnitedInfos.BO;
+using BWP.Web.Utils;
+using Forks.EnterpriseServices;
+using Forks.EnterpriseServices.BusinessInterfaces;
+using Forks.EnterpriseServices.DataForm;
+using Forks.EnterpriseServices.DomainObjects2;
+using Forks.EnterpriseServices.DomainObjects2.DQuery;
+using Forks.EnterpriseServices.SqlDoms;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Web.UI;
+using System.Web.UI.HtmlControls;
+using TSingSoft.WebControls2;
+using TSingSoft.WebPluginFramework;
+using Forks.Utils.Collections;
+using BWP.B3_YunKen.BL;
+using BWP.B3Frameworks.Utils;
+using BWP.B3Sale.Utils;
+
+namespace BWP.Web.Pages.B3YunKen.Bill
+{
+ public class GoodsPackageDetailSet : AppBasePage
+ {
+
+ List Details
+ {
+ get
+ {
+ if (ViewState["Details"] == null)
+ ViewState["Details"] = new List();
+ return (List)ViewState["Details"];
+ }
+ set { ViewState["Details"] = value; }
+ }
+
+
+ private List> WrappageKindList
+ {
+ get
+ {
+ if (ViewState["WrappageKindList"] == null)
+ ViewState["WrappageKindList"] = new List>();
+ return (List>)ViewState["WrappageKindList"];
+ }
+ set { ViewState["WrappageKindList"] = value; }
+ }
+
+ long GoodsID
+ {
+ get
+ {
+ if (string.IsNullOrEmpty(Request.QueryString["goodsID"]))
+ return 0;
+ return long.Parse(Request.QueryString["goodsID"]);
+ }
+ }
+
+ long? AccID
+ {
+ get
+ {
+ if (string.IsNullOrEmpty(Request.QueryString["accID"]))
+ return null;
+ return long.Parse(Request.QueryString["accID"]);
+ }
+ }
+
+ private DFEditGrid _grid;
+ protected override void InitForm(HtmlForm form)
+ {
+ var vPanel = AddChild(form, new VLayoutPanel());
+ var hPanel = vPanel.Add(new HLayoutPanel());
+ hPanel.Add(new LiteralControl("包装物明细
"));
+ var editor = new DFCollectionEditor(() => Details)
+ {
+ AllowDeletionFunc = () => false,
+ CanDeleteFunc = detail => false,
+ CanSelectFunc = detail => true,
+ IsEditableFunc = (field, detail) =>
+ {
+ switch (field.Name)
+ {
+ case "GoodsName":
+ case "AccountingUnitName":
+ return false;
+ }
+ return true;
+ },
+ };
+ _grid = vPanel.Add(new DFEditGrid(editor));
+
+ _grid.Columns.Add(new DFEditGridColumn("AccountingUnitName"));
+ _grid.Columns.Add(new DFEditGridColumn("GoodsName"));
+
+ int i = 1;
+ foreach (var tuple in WrappageKindList)
+ {
+ var col = _grid.Columns.EAdd(new DFEditGridColumn("ID" + i));
+ var tuple1 = tuple;
+ var i1 = i;
+ col.InitEditControl += (sender, e) =>
+ {
+ e.Control.Width = 130;
+ e.Control.EnableInputArgument = true;
+ e.Control.EnableTopItem = true;
+ e.Control.DataKind = B3SaleDataSources.包装物;
+ e.Control.DFDisplayField = "Name" + i1;
+ e.Control.OnBeforeDrop = "this.argument2 = dfContainer.getValue('AccountingUnitID') +'|'+" + tuple1.Item1 + ";";
+ };
+ col.HeaderText = tuple.Item2;
+ i++;
+ }
+
+ var colSmall = _grid.Columns.EAdd(new DFEditGridColumn("SmallPackNum"));
+ colSmall.HeaderText = "内包装物数量";
+
+
+
+ _grid.ValueColumns.Add("AccountingUnitID");
+ var hPanel2 = vPanel.Add(new HLayoutPanel());
+ hPanel2.Add(new TSButton("保存", delegate
+ {
+ _grid.GetFromUI();
+ using (var context = new TransactionContext())
+ {
+ var bl = BIFactory.Create(context);
+ foreach (PackageDetail detail in Details)
+ {
+ var index = 1;
+ foreach (var tuple in WrappageKindList)
+ {
+ bl.UpdateGoodsPackage(GoodsID, (long?)GetDmoFieldValue(detail, "ID" + index), tuple.Item1, detail.AccountingUnitID, (int)GetDmoFieldValue(detail, "SmallPackNum"));
+ index++;
+ }
+ }
+ context.Commit();
+ }
+ AspUtil.Alert(this, "保存成功");
+ }));
+ hPanel2.Add(new TSButton("返回", delegate
+ {
+ DialogUtil.SetCachedObj(this, "ok");
+ }));
+
+ }
+
+
+ static void SetDmoField(object destObj, string field, object value)
+ {
+ var dDmoInfo = DmoInfo.Get(destObj);
+ IDmoFieldInfo dfield;
+ if (!dDmoInfo.Fields.TryGetValue(field, out dfield))
+ {
+ return;
+ }
+ dfield.SetValue(destObj, value);
+ }
+
+ static object GetDmoFieldValue(object destObj, string field)
+ {
+ var dDmoInfo = DmoInfo.Get(destObj);
+ IDmoFieldInfo dfield;
+ if (!dDmoInfo.Fields.TryGetValue(field, out dfield))
+ {
+ throw new Exception(field + "");
+ }
+ return dfield.GetValue(destObj);
+ }
+
+ private void GridDataBind()
+ {
+ var acc = new JoinAlias("acc", typeof(AccountingUnit));
+ var package = new JoinAlias(typeof(TempClass));
+ var dom = new DQueryDom(acc);
+ dom.RegisterQueryTable(typeof(TempClass), new[] { "PackageID", "PackageName", "WrappageKindTreeDeep1ID", "AccountingUnitID" }, GetTempDom());
+ dom.From.AddJoin(JoinType.Left, new DQDmoSource(package), DQCondition.EQ(package, "AccountingUnitID", acc, "ID"));
+
+ dom.Columns.Add(DQSelectColumn.Field("PackageID", package));
+ dom.Columns.Add(DQSelectColumn.Field("PackageName", package));
+ dom.Columns.Add(DQSelectColumn.Field("WrappageKindTreeDeep1ID", package));
+ dom.Columns.Add(DQSelectColumn.Field("ID", acc));
+ dom.Columns.Add(DQSelectColumn.Field("Name", acc));
+ //dom.Columns.Add(DQSelectColumn.Field("SmallPackNum", package));
+ if (AccID != null)
+ {
+ dom.Where.Conditions.Add(DQCondition.EQ("ID", AccID));
+ }
+ else
+ {
+ //AuthorizeUtil.AddOrganizationAuthorising(dom, "Organization_ID");
+ OrganizationUtil.AddOrganizationLimit(dom, typeof(AccountingUnit), acc);
+ }
+
+ Details.Clear();
+ using (var context = new TransactionContext())
+ {
+ var idList = new List();
+ using (var reader = context.Session.ExecuteReader(dom))
+ {
+ while (reader.Read())
+ {
+ var d = new PackageDetail();
+ d.PackageID = (long?)reader[0];
+ d.PackageName = (string)reader[1];
+ d.AccountingUnitID = (long)reader[3];
+ d.AccountingUnitName = (string)reader[4];
+ d.WrappageKindTreeDeep1ID = (long?)reader[2];
+ idList.Add(d);
+ }
+ }
+
+ //var goodsName = InnerBLUtil.GetDmoProperty(GoodsID, "Name", context.Session);
+ var goodsName = InnerBLUtil.GetDmoPropertyByID(context.Session, "Name", GoodsID);
+ var exsitList = idList.Where(x => x.PackageID != null).ToList();
+ var notExsitList = idList.Where(x => x.PackageID == null).ToList();
+ foreach (var details in exsitList.GroupBy(x => x.AccountingUnitID))
+ {
+ var dmo = new PackageDetail();
+ dmo.GoodsID = GoodsID;
+ dmo.GoodsName = goodsName;
+ dmo.AccountingUnitID = details.Key;
+ dmo.AccountingUnitName = details.First().AccountingUnitName;
+ int index = 1;
+ foreach (var tuple in WrappageKindList)
+ {
+ var first = details.FirstOrDefault(x => x.WrappageKindTreeDeep1ID == tuple.Item1);
+ if (first != null)
+ {
+ SetDmoField(dmo, "ID" + index, first.PackageID);
+ SetDmoField(dmo, "Name" + index, first.PackageName);
+
+ // var packClassId = BLUtil.GetDmoProperty(first.PackageID ?? 0, "WrappageKind_ID", context);
+ var packClassId = GetTreeDeep1(first.PackageID ?? 0, context);
+
+ if (packClassId == 5)//5固定写死
+ {
+ var query = new DQueryDom(new JoinAlias(typeof(Goods_Package)));
+ query.Columns.Add(DQSelectColumn.Field("SmallPackNum"));
+ query.Where.Conditions.Add(DQCondition.EQ("Goods_ID", GoodsID));
+ query.Where.Conditions.Add(DQCondition.EQ("Package_ID", first.PackageID));
+ SetDmoField(dmo, "SmallPackNum", context.Session.ExecuteScalar(query));
+ }
+
+ }
+
+ index++;
+ }
+
+ Details.Add(dmo);
+ }
+ foreach (var packageDetail in notExsitList)
+ {
+ var dmo = new PackageDetail();
+ dmo.GoodsID = GoodsID;
+ dmo.GoodsName = goodsName;
+ dmo.AccountingUnitID = packageDetail.AccountingUnitID;
+ dmo.AccountingUnitName = packageDetail.AccountingUnitName;
+ Details.Add(dmo);
+ }
+ }
+ _grid.DataBind();
+ }
+
+ private int GetTreeDeep1(long value, TransactionContext context)
+ {
+ //select pack.WrappageKind_ID,cla.* from B3_YunKen_Package pack left join B3_YunKen_WrappageKind cla on pack.WrappageKind_ID=cla.ID where pack.ID=487
+ var pack = new JoinAlias(typeof(Wrappage));
+ var packClass = new JoinAlias(typeof(WrappageKind));
+ var dom = new DQueryDom(pack);
+ dom.From.AddJoin(JoinType.Left, new DQDmoSource(packClass), DQCondition.EQ(pack, "WrappageKind_ID", packClass, "ID"));
+ dom.Columns.Add(DQSelectColumn.Field("TreeDeep1ID", packClass));
+ dom.Where.Conditions.Add(DQCondition.EQ(pack, "ID", value));
+ return Convert.ToInt32(context.Session.ExecuteScalar(dom));
+ }
+ DQueryDom GetTempDom()
+ {
+ var acc = new JoinAlias("acc", typeof(AccountingUnit));
+ var goodsPackage = new JoinAlias(typeof(Goods_Package));
+ var package = new JoinAlias(typeof(Wrappage));
+ var dom = new DQueryDom(goodsPackage);
+ dom.From.AddJoin(JoinType.Left, new DQDmoSource(package), DQCondition.EQ(goodsPackage, "Package_ID", package, "ID"));
+ dom.From.AddJoin(JoinType.Left, new DQDmoSource(acc), DQCondition.EQ(package, "AccountingUnit_ID", acc, "ID"));
+
+ dom.Columns.Add(DQSelectColumn.Field("ID", package));
+ dom.Columns.Add(DQSelectColumn.Field("Name", package));
+ dom.Columns.Add(DQSelectColumn.Field("WrappageKind_TreeDeep1ID", package));
+ dom.Columns.Add(DQSelectColumn.Field("ID", acc));
+
+
+ if (AccID != null)
+ {
+ dom.Where.Conditions.Add(DQCondition.EQ(package, "AccountingUnit_ID", AccID));
+ }
+ else
+ {
+ //AuthorizeUtil.AddOrganizationAuthorising(dom, new KeyValuePair("acc", "Organization_ID"));
+ OrganizationUtil.AddOrganizationLimit(dom, typeof(AccountingUnit), acc);
+ }
+ dom.Where.Conditions.Add(DQCondition.EQ(goodsPackage, "Goods_ID", GoodsID));
+
+ return dom;
+ }
+
+ protected override void OnLoad(EventArgs e)
+ {
+ base.OnLoad(e);
+ if (!IsPostBack)
+ {
+ GridDataBind();
+ }
+ }
+
+ protected override void FrameworkInitialize()
+ {
+ var dom = new DQueryDom(new JoinAlias(typeof(WrappageKind)));
+ dom.Where.Conditions.Add(DQCondition.EQ("Depth", 1));
+ dom.Columns.Add(DQSelectColumn.Field("ID"));
+ dom.Columns.Add(DQSelectColumn.Field("Name"));
+ WrappageKindList = dom.EExecuteList();
+ base.FrameworkInitialize();
+ }
+
+ class TempClass
+ {
+ public long? PackageID { get; set; }
+ public string PackageName { get; set; }
+ public long? WrappageKindTreeDeep1ID { get; set; }
+ public long AccountingUnitID { get; set; }
+
+ }
+
+ [DFClass, Serializable]
+ class PackageDetail
+ {
+
+ public long GoodsID { get; set; }
+
+ [LogicName("产品")]
+ public string GoodsName { get; set; }
+
+ public long AccountingUnitID { get; set; }
+
+ [LogicName("会计单位")]
+ public string AccountingUnitName { get; set; }
+ public long? WrappageKindTreeDeep1ID { get; set; }
+
+ public long? PackageID { get; set; }
+ public string PackageName { get; set; }
+
+ public long? ID1 { get; set; }
+ public long? ID2 { get; set; }
+ public long? ID3 { get; set; }
+ public long? ID4 { get; set; }
+ public long? ID5 { get; set; }
+ public long? ID6 { get; set; }
+ public long? ID7 { get; set; }
+ public long? ID8 { get; set; }
+
+ public string Name1 { get; set; }
+ public string Name2 { get; set; }
+ public string Name3 { get; set; }
+ public string Name4 { get; set; }
+ public string Name5 { get; set; }
+ public string Name6 { get; set; }
+ public string Name7 { get; set; }
+ public string Name8 { get; set; }
+
+
+ private int _smallPackNum = 1;
+ [LogicName("内包装物数量")]
+ public int SmallPackNum
+ {
+ get { return _smallPackNum; }
+ set { _smallPackNum = value; }
+ }
+
+ }
+
+ }
+}
diff --git a/BWP.B3_YunKen.Web/Pages/B3YunKen/Bill/GoodsPackageSet.cs b/BWP.B3_YunKen.Web/Pages/B3YunKen/Bill/GoodsPackageSet.cs
new file mode 100644
index 0000000..74a2d20
--- /dev/null
+++ b/BWP.B3_YunKen.Web/Pages/B3YunKen/Bill/GoodsPackageSet.cs
@@ -0,0 +1,276 @@
+using BWP.B3_YunKen.BO;
+using BWP.B3Frameworks.BO;
+using BWP.B3Frameworks.Utils;
+using BWP.B3Sale.BO;
+using BWP.B3UnitedInfos.BO;
+using BWP.Web.Utils;
+using Forks.EnterpriseServices.DataForm;
+using Forks.EnterpriseServices.DomainObjects2;
+using Forks.EnterpriseServices.DomainObjects2.DQuery;
+using Forks.EnterpriseServices.SqlDoms;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Web.UI;
+using System.Web.UI.HtmlControls;
+using System.Web.UI.WebControls;
+using TSingSoft.WebControls2;
+using TSingSoft.WebPluginFramework;
+using TSingSoft.WebPluginFramework.Controls;
+using TSingSoft.WebPluginFramework.Security;
+using Forks.Utils.Collections;
+
+
+namespace BWP.Web.Pages.B3YunKen.Bill
+{
+ public class GoodsPackageSet : AppBasePage
+ {
+ readonly DFInfo _dfInfo = DFInfo.Get(typeof(Goods_Package));
+ private DFChoiceBox _accountingUnitDfc;
+ private DFChoiceBox _goodsDfc;
+ private DFBrowseGrid _grid;
+
+ protected override void InitForm(HtmlForm form)
+ {
+ CheckRole();
+ form.Controls.Add(new PageTitle("产品包装物设置"));
+ var vPanel = new VLayoutPanel();
+ AddChild(form, vPanel);
+ CreateQueryControl(vPanel);
+ CreateGrid(vPanel);
+
+ }
+
+ void CheckRole()
+ {
+ if (!BLContext.User.IsInRole("B3_YunKen.产品包装物设置.访问"))
+ throw new AppSecurityException("您没有权限访问此页面");
+ }
+
+
+
+ private void CreateQueryControl(VLayoutPanel vPanel)
+ {
+ var tablePanel = new TableLayoutPanel(6, 2);
+ vPanel.Add(tablePanel);
+
+ int row = 0;
+ tablePanel.Add(0, 1, row, row + 1, new SimpleLabel("会计单位", 4));
+ _accountingUnitDfc = tablePanel.Add(1, 2, row, ++row, QueryCreator.DFChoiceBox(_dfInfo.Fields["Package_AccountingUnit_ID"], "授权会计单位"), new TableLayoutOption(Unit.Pixel(180)));
+
+ row = 0;
+ tablePanel.Add(2, 3, row, row + 1, new SimpleLabel("产品", 4));
+ _goodsDfc = tablePanel.Add(3, 4, row, ++row, QueryCreator.DFChoiceBox(_dfInfo.Fields["Goods_ID"], "存货"), new TableLayoutOption(Unit.Pixel(180)));
+ }
+
+ private void CreateGrid(VLayoutPanel vPanel)
+ {
+ var hPanel = vPanel.Add(new HLayoutPanel(), new VLayoutOption(HorizontalAlign.Center));
+ hPanel.Add(new LiteralControl("产品明细
"));
+ hPanel.Add(new TSButton("已配产品", delegate { GridDataBind(true); }));
+ hPanel.Add(new LiteralControl(" "));
+ hPanel.Add(new TSButton("未配产品", delegate { GridDataBind(); }));
+
+ _grid = vPanel.Add(new DFBrowseGrid(new DFDataTableEditor()), new VLayoutOption(HorizontalAlign.Center));
+ _grid.Width = Unit.Percentage(50);
+ _grid.Add(new DFBrowseGridAutoColumn("Goods_ID"));
+ _grid.DFGridSetEnabled = false;
+ _grid.OnDetailDataBound = (row, obj, index) =>
+ {
+ var dataRow = obj as DFDataRow;
+ if (dataRow == null)
+ {
+ return;
+ }
+ var goodsID = dataRow["Goods_ID"];
+ var url = AspUtil.UpdateUrlParam("GoodsPackageDetailSet.aspx", "goodsID", goodsID.ToString());
+ if (!string.IsNullOrEmpty(_accountingUnitDfc.Value))
+ {
+ url = AspUtil.UpdateUrlParam(url, "accID", _accountingUnitDfc.Value);
+ }
+ row.Cells[0].InnerHtml = "" + row.Cells[0].InnerHtml + "";
+ };
+
+ }
+
+
+ protected override void OnPreRender(EventArgs e)
+ {
+ base.OnPreRender(e);
+ DialogUtil.RegisterDialogReturnInput(Page);
+ }
+
+ private List> WrappageKindList
+ {
+ get
+ {
+ if (ViewState["WrappageKindList"] == null)
+ ViewState["WrappageKindList"] = new List>();
+ return (List>)ViewState["WrappageKindList"];
+ }
+ set { ViewState["WrappageKindList"] = value; }
+ }
+
+ protected override void OnLoad(EventArgs e)
+ {
+ base.OnLoad(e);
+ if (!IsPostBack)
+ {
+ var dom = new DQueryDom(new JoinAlias(typeof(WrappageKind)));
+ dom.Where.Conditions.Add(DQCondition.EQ("Depth", 1));
+ dom.Columns.Add(DQSelectColumn.Field("ID"));
+ dom.Columns.Add(DQSelectColumn.Field("Name"));
+ WrappageKindList = dom.EExecuteList();
+ GridDataBind();
+ }
+ }
+
+ private void GridDataBind(bool configured = false)
+ {
+ _grid.Query = GetDQueryDom(configured);
+ _grid.CurrentPageIndex = 0;
+ _grid.DataBind();
+ }
+
+ public void DoGridDataBind()
+ {
+ _grid.DataBind();
+ }
+
+ private DQueryDom GetDQueryDom(bool configured = false)
+ {
+ var goods = new JoinAlias(typeof(Goods));
+ var temp = new JoinAlias(typeof(TempPackage));
+ var temp2 = new JoinAlias(typeof(TempPackage2));
+ var dom = new DQueryDom(goods);
+ dom.Columns.Add(DQSelectColumn.Create(DQExpression.Field(goods, "ID"), "Goods_ID"));
+ dom.Columns.Add(DQSelectColumn.Create(DQExpression.Field(goods, "Name"), "产品"));
+ if (configured)
+ {
+ var strings = new string[] { "Goods_ID", "AccountingUnit_Name", "Count" }.ToList();
+ for (var index = 0; index < WrappageKindList.Count; index++)
+ {
+ if (index + 1 > MaxCol)
+ break;
+ strings.Add("ID" + (index + 1));
+ }
+ strings.Add("SmallPackNum");
+ dom.RegisterQueryTable(typeof(TempPackage2), strings, GetTempDom2());
+ dom.From.AddJoin(JoinType.Right, new DQDmoSource(temp2), DQCondition.EQ(temp2, "Goods_ID", goods, "ID"));
+ dom.Columns.Add(DQSelectColumn.Create(DQExpression.Field(temp2, "Count"), "已配数量"));
+ dom.Columns.Add(DQSelectColumn.Create(DQExpression.Field(temp2, "AccountingUnit_Name"), "会计单位"));
+
+ int i = 1;
+ foreach (var tuple in WrappageKindList)
+ {
+ if (i > MaxCol)
+ break;
+ var package = new JoinAlias("p" + i, typeof(Wrappage));
+ dom.From.AddJoin(JoinType.Left, new DQDmoSource(package), DQCondition.EQ(package, "ID", temp2, "ID" + i));
+ dom.Columns.Add(
+ DQSelectColumn.Create(DQExpression.Field(package, "Name"), tuple.Item2));
+ i++;
+ }
+ dom.OrderBy.Expressions.Add(DQOrderByExpression.Create(goods, "Name"));
+ dom.OrderBy.Expressions.Add(DQOrderByExpression.Create(temp2, "AccountingUnit_Name"));
+
+ dom.Columns.Add(DQSelectColumn.Create(DQExpression.Field(temp2, "SmallPackNum"), "内包装物数量"));
+ }
+ else
+ {
+ dom.RegisterQueryTable(typeof(TempPackage), new[] { "Goods_ID" }, GetTempDom());
+ dom.From.AddJoin(JoinType.Left, new DQDmoSource(temp), DQCondition.EQ(temp, "Goods_ID", goods, "ID"));
+ dom.Where.Conditions.Add(DQCondition.IsNull(DQExpression.Field(temp, "Goods_ID")));
+ }
+ if (!string.IsNullOrEmpty(_goodsDfc.Value))
+ {
+ dom.Where.Conditions.Add(DQCondition.EQ("ID", _goodsDfc.Value));
+ }
+
+ dom.Where.Conditions.Add(DQCondition.IsNotNull(DQExpression.Field(goods, "ID")));
+ //不显示停用存货
+ dom.Where.Conditions.Add(DQCondition.InEQ(DQExpression.Field(goods, "Stopped"), DQExpression.Value(0)));
+ return dom;
+ }
+
+ private DQueryDom GetTempDom()
+ {
+ var gpackage = new JoinAlias(typeof(Goods_Package));
+ var dom = new DQueryDom(gpackage);
+ dom.Columns.Add(DQSelectColumn.Field("Goods_ID"));
+ if (!string.IsNullOrEmpty(_accountingUnitDfc.Value))
+ {
+ dom.Where.Conditions.Add(DQCondition.EQ("Package_AccountingUnit_ID", _accountingUnitDfc.Value));
+ }
+ //AuthorizeUtil.AddOrganizationAuthorising(dom, "Package_AccountingUnit_Organization_ID");
+ OrganizationUtil.AddOrganizationLimit(dom, typeof(Goods_Package), gpackage);
+ return dom;
+ }
+
+ private const int MaxCol = 10;
+
+ private DQueryDom GetTempDom2()
+ {
+ var WrappageKind = new JoinAlias(typeof(WrappageKind));
+ var gpackage = new JoinAlias(typeof(Goods_Package));
+ var package = new JoinAlias(typeof(Wrappage));
+ var acc = new JoinAlias("acc", typeof(AccountingUnit));
+ var dom = new DQueryDom(gpackage);
+ dom.From.AddJoin(JoinType.Left, new DQDmoSource(package), DQCondition.EQ(package, "ID", gpackage, "Package_ID"));
+ dom.From.AddJoin(JoinType.Left, new DQDmoSource(WrappageKind), DQCondition.EQ(package, "WrappageKind_ID", WrappageKind, "ID"));
+ dom.From.AddJoin(JoinType.Left, new DQDmoSource(acc), DQCondition.EQ(package, "AccountingUnit_ID", acc, "ID"));
+
+ dom.Columns.Add(DQSelectColumn.Field("Goods_ID"));
+ dom.Columns.Add(DQSelectColumn.Field("Name", acc));
+ dom.Columns.Add(DQSelectColumn.Create(DQExpression.Count(), "Count"));
+ dom.GroupBy.Expressions.Add(DQExpression.Field("Goods_ID"));
+ dom.GroupBy.Expressions.Add(DQExpression.Field(acc, "Name"));
+ int i = 1;
+ foreach (var tuple in WrappageKindList)
+ {
+ if (i > MaxCol)
+ break;
+ dom.Columns.Add(
+ DQSelectColumn.Create(
+ DQExpression.Sum(DQExpression.LogicCase(DQCondition.EQ(WrappageKind, "TreeDeep1ID", tuple.Item1), DQExpression.Field(package, "ID"))), tuple.Item2));
+ i++;
+ }
+ dom.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.InEQ(WrappageKind, "TreeDeep1ID", 5), DQExpression.Value(0), DQExpression.Field(gpackage, "SmallPackNum"))), "SmallPackNum"));
+
+ if (!string.IsNullOrEmpty(_accountingUnitDfc.Value))
+ {
+ dom.Where.Conditions.Add(DQCondition.EQ(acc, "ID", _accountingUnitDfc.Value));
+ }
+ //AuthorizeUtil.AddOrganizationAuthorising(dom, new KeyValuePair("acc", "Organization_ID"));
+ OrganizationUtil.AddOrganizationLimit(dom, typeof(AccountingUnit), acc);
+ return dom;
+ }
+
+ class TempPackage
+ {
+ public long Goods_ID { get; set; }
+ }
+
+ class TempPackage2
+ {
+ public string SmallPackNum { get; set; }
+
+ public long Goods_ID { get; set; }
+ public string AccountingUnit_Name { get; set; }
+ public long Count { get; set; }
+ public long ID1 { get; set; }
+ public long ID2 { get; set; }
+ public long ID3 { get; set; }
+ public long ID4 { get; set; }
+ public long ID5 { get; set; }
+ public long ID6 { get; set; }
+ public long ID7 { get; set; }
+ public long ID8 { get; set; }
+ public long ID9 { get; set; }
+ public long ID10 { get; set; }
+ }
+
+
+ }
+}
diff --git a/BWP.B3_YunKen/BL/Bill/Goods_PackageBL.cs b/BWP.B3_YunKen/BL/Bill/Goods_PackageBL.cs
new file mode 100644
index 0000000..5001ea6
--- /dev/null
+++ b/BWP.B3_YunKen/BL/Bill/Goods_PackageBL.cs
@@ -0,0 +1,111 @@
+using BWP.B3_YunKen.BO;
+using BWP.B3Frameworks.BL;
+using BWP.B3Frameworks.Utils;
+using BWP.B3Sale.BO;
+using BWP.B3UnitedInfos.BO;
+using Forks.EnterpriseServices;
+using Forks.EnterpriseServices.BusinessInterfaces;
+using Forks.EnterpriseServices.DomainObjects2;
+using Forks.EnterpriseServices.DomainObjects2.DQuery;
+using Forks.EnterpriseServices.SqlDoms;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using TSingSoft.WebPluginFramework;
+
+namespace BWP.B3_YunKen.BL
+{
+ [BusinessInterface(typeof(Goods_PackageBL))]
+ [LogicName("包装物")]
+ public interface IGoods_PackageBL : IBaseInfoBL
+ {
+ void UpdateGoodsPackage(long goodsID, long? packageID, long classID, long accID, int smallPackNum);
+ }
+
+ public class Goods_PackageBL : BaseInfoBL, IGoods_PackageBL
+ {
+
+ private int _cludeClassId = 5; //5 固定写死
+
+ public void UpdateGoodsPackage(long goodsID, long? packageID, long classID, long accID, int smallPackNum)
+ {
+ long? cid;
+ if (packageID != null)
+ {
+ //cid = BLUtil.GetDmoProperty(packageID.Value, "PackageClass_TreeDeep1ID", Session);
+ cid = InnerBLUtil.GetDmoPropertyByID(Session, "WrappageKind_TreeDeep1ID", packageID.Value);
+ }
+ else
+ {
+ cid = classID;
+ }
+
+ var query = new DmoQuery(typeof(Goods_Package));
+ query.Where.Conditions.Add(DQCondition.EQ("Goods_ID", goodsID));
+ query.Where.Conditions.Add(DQCondition.EQ("PackageClass_TreeDeep1ID", cid));
+ query.Where.Conditions.Add(DQCondition.EQ("Package_AccountingUnit_ID", accID));
+ var dmo = (Goods_Package)Session.ExecuteScalar(query);
+
+ if (packageID == null)
+ {
+ if (dmo != null)
+ Session.Delete(dmo);
+ }
+ else
+ {
+ //var price = BLUtil.GetDmoProperty(packageID.Value, "Price", Session);
+ var price = InnerBLUtil.GetDmoPropertyByID(Session, "Price", packageID.Value);
+ // var packClassId = BLUtil.GetDmoProperty(packageID.Value, "PackageClass_ID", Session);
+ int packClassId = GetTreeDeep1(packageID.Value, Session);
+
+
+ if (dmo == null)
+ {
+ dmo = new Goods_Package { Goods_ID = goodsID, Package_ID = packageID, Price = price };
+ if (packClassId == _cludeClassId)
+ {
+ dmo.SmallPackNum = smallPackNum;
+ }
+ else
+ {
+ dmo.SmallPackNum = 1;
+ }
+ Session.Insert(dmo);
+ }
+
+ else if (dmo.Package_ID != packageID || (packClassId == _cludeClassId && dmo.SmallPackNum != smallPackNum))
+ {
+ dmo.Package_ID = packageID;
+
+ if (packClassId == _cludeClassId)
+ {
+ dmo.SmallPackNum = smallPackNum;
+ }
+ else
+ {
+ dmo.SmallPackNum = 1;
+ }
+ dmo.Date = BLContext.Today;
+ dmo.Price = price;
+ Session.Update(dmo);
+ }
+ }
+ }
+
+ private int GetTreeDeep1(long value, IDmoSession session)
+ {
+ //select pack.PackageClass_ID,cla.* from SaleYunKen_Package pack left join SaleYunKen_PackageClass cla on pack.PackageClass_ID=cla.ID where pack.ID=487
+ var pack = new JoinAlias(typeof(Wrappage));
+ var packClass = new JoinAlias(typeof(WrappageKind));
+ var dom = new DQueryDom(pack);
+ dom.From.AddJoin(JoinType.Left, new DQDmoSource(packClass), DQCondition.EQ(pack, "WrappageKind_ID", packClass, "ID"));
+ dom.Columns.Add(DQSelectColumn.Field("TreeDeep1ID", packClass));
+ dom.Where.Conditions.Add(DQCondition.EQ(pack, "ID", value));
+ return Convert.ToInt32(session.ExecuteScalar(dom));
+ }
+
+ }
+
+
+}
diff --git a/BWP.B3_YunKen/BO/Bill/Goods_Package.cs b/BWP.B3_YunKen/BO/Bill/Goods_Package.cs
new file mode 100644
index 0000000..dc667b2
--- /dev/null
+++ b/BWP.B3_YunKen/BO/Bill/Goods_Package.cs
@@ -0,0 +1,76 @@
+using BWP.B3Frameworks.BO;
+using BWP.B3Sale.BO;
+using BWP.B3UnitedInfos.BO;
+using Forks.EnterpriseServices;
+using Forks.EnterpriseServices.DataForm;
+using Forks.EnterpriseServices.DomainObjects2;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using TSingSoft.WebPluginFramework;
+
+
+namespace BWP.B3_YunKen.BO
+{
+ public class Goods_Package : BaseInfo
+ {
+
+ [LogicName("产品ID")]
+ public long? Goods_ID { get; set; }
+
+ [LogicName("包装物")]
+ public long? Package_ID { get; set; }
+
+ [LogicName("价格")]
+ public decimal? Price { get; set; }
+
+ private int _smallPackNum = 1;
+ [LogicName("小包装物数量")]
+ [DbColumn(DefaultValue = 1)]
+ public int SmallPackNum
+ {
+ get { return _smallPackNum; }
+ set { _smallPackNum = value; }
+ }
+
+ private DateTime? _date = BLContext.Today;
+
+ [LogicName("启用日期")]
+ public DateTime? Date
+ {
+ get { return _date; }
+ set { _date = value; }
+ }
+
+ [Join("Goods_ID", "ID")]
+ [LogicName("产品")]
+ [ReferenceTo(typeof(Goods), "Name")]
+ public string Goods_Name { get; set; }
+
+ [DFPrompt("包装物")]
+ [Join("Package_ID", "ID")]
+ [ReferenceTo(typeof(Wrappage), "Name")]
+ public string Package_Name { get; set; }
+
+ [Join("Package_ID", "ID")]
+ [ReferenceTo(typeof(Wrappage), "WrappageKind_TreeDeep1ID")]
+ public long? PackageClass_TreeDeep1ID { get; set; }
+
+ [DFPrompt("会计单位")]
+ [LogicName("会计单位D")]
+ [Join("Package_ID", "ID")]
+ [ReferenceTo(typeof(Wrappage), "AccountingUnit_ID")]
+ public long? Package_AccountingUnit_ID { get; set; }
+
+ [DFPrompt("会计单位")]
+ [Join("Package_ID", "ID")]
+ [ReferenceTo(typeof(Wrappage), "AccountingUnit_Name")]
+ public string Package_AccountingUnit_Name { get; set; }
+
+ //[Join("Package_ID", "ID")]
+ //[ReferenceTo(typeof(Wrappage), "AccountingUnit_Organization_ID")]
+ //public long? Package_AccountingUnit_Organization_ID { get; set; }
+
+ }
+}
diff --git a/BWP.B3_YunKen/BWP.B3_YunKen.csproj b/BWP.B3_YunKen/BWP.B3_YunKen.csproj
index 3987cdd..b43aa6b 100644
--- a/BWP.B3_YunKen/BWP.B3_YunKen.csproj
+++ b/BWP.B3_YunKen/BWP.B3_YunKen.csproj
@@ -62,6 +62,8 @@
+
+
@@ -71,10 +73,8 @@
-
-
diff --git a/WebFolder/Config/Plugins/B3_YunKen.Plugin b/WebFolder/Config/Plugins/B3_YunKen.Plugin
index 0e8d9f4..de2b8c0 100644
--- a/WebFolder/Config/Plugins/B3_YunKen.Plugin
+++ b/WebFolder/Config/Plugins/B3_YunKen.Plugin
@@ -26,11 +26,16 @@
+
+
+
+
-
+
+