From 151cb0bfe5da358a437780eaabbf54076d70b96c Mon Sep 17 00:00:00 2001 From: xueyingcheng Date: Thu, 7 Dec 2017 14:04:59 +0800 Subject: [PATCH] =?UTF-8?q?=E9=9C=80=E6=B1=82=E5=8D=95No.137215?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- B3_YunKen.sln | 6 +- BWP.B3_YunKen.Web/BWP.B3_YunKen.Web.csproj | 10 +- .../B3YunKen/Bill/GoodsPackageDetailSet.cs | 386 ++++++++++++++++++ .../Pages/B3YunKen/Bill/GoodsPackageSet.cs | 276 +++++++++++++ BWP.B3_YunKen/BL/Bill/Goods_PackageBL.cs | 111 +++++ BWP.B3_YunKen/BO/Bill/Goods_Package.cs | 76 ++++ BWP.B3_YunKen/BWP.B3_YunKen.csproj | 4 +- WebFolder/Config/Plugins/B3_YunKen.Plugin | 7 +- 8 files changed, 869 insertions(+), 7 deletions(-) create mode 100644 BWP.B3_YunKen.Web/Pages/B3YunKen/Bill/GoodsPackageDetailSet.cs create mode 100644 BWP.B3_YunKen.Web/Pages/B3YunKen/Bill/GoodsPackageSet.cs create mode 100644 BWP.B3_YunKen/BL/Bill/Goods_PackageBL.cs create mode 100644 BWP.B3_YunKen/BO/Bill/Goods_Package.cs 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 @@ + + + + - + +