| @ -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<PackageDetail> Details | |||
| { | |||
| get | |||
| { | |||
| if (ViewState["Details"] == null) | |||
| ViewState["Details"] = new List<PackageDetail>(); | |||
| return (List<PackageDetail>)ViewState["Details"]; | |||
| } | |||
| set { ViewState["Details"] = value; } | |||
| } | |||
| private List<Tuple<long, string>> WrappageKindList | |||
| { | |||
| get | |||
| { | |||
| if (ViewState["WrappageKindList"] == null) | |||
| ViewState["WrappageKindList"] = new List<Tuple<long, string>>(); | |||
| return (List<Tuple<long, string>>)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("<h2>包装物明细</h2>")); | |||
| var editor = new DFCollectionEditor<PackageDetail>(() => 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<DFChoiceBox>("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<DFTextBox>("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<IGoods_PackageBL>(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<PackageDetail>(); | |||
| 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<Goods, string>(GoodsID, "Name", context.Session); | |||
| var goodsName = InnerBLUtil.GetDmoPropertyByID<Goods, string>(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<Package, long?>(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<string, string>("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<long, string>(); | |||
| 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; } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @ -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("<h2>产品明细</h2>")); | |||
| 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 = "<a target='_blank' href='' onclick=\"var returnValue = " + string.Format("ShowDialog('{0}'); ", url) + @"return false;"">" + row.Cells[0].InnerHtml + "</a>"; | |||
| }; | |||
| } | |||
| protected override void OnPreRender(EventArgs e) | |||
| { | |||
| base.OnPreRender(e); | |||
| DialogUtil.RegisterDialogReturnInput(Page); | |||
| } | |||
| private List<Tuple<long, string>> WrappageKindList | |||
| { | |||
| get | |||
| { | |||
| if (ViewState["WrappageKindList"] == null) | |||
| ViewState["WrappageKindList"] = new List<Tuple<long, string>>(); | |||
| return (List<Tuple<long, string>>)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<long, string>(); | |||
| 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<string, string>("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; } | |||
| } | |||
| } | |||
| } | |||
| @ -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<Goods_Package> | |||
| { | |||
| void UpdateGoodsPackage(long goodsID, long? packageID, long classID, long accID, int smallPackNum); | |||
| } | |||
| public class Goods_PackageBL : BaseInfoBL<Goods_Package>, 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<Wrappage, long?>(packageID.Value, "PackageClass_TreeDeep1ID", Session); | |||
| cid = InnerBLUtil.GetDmoPropertyByID<Wrappage, long?>(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<Wrappage, decimal?>(packageID.Value, "Price", Session); | |||
| var price = InnerBLUtil.GetDmoPropertyByID<Wrappage, decimal?>(Session, "Price", packageID.Value); | |||
| // var packClassId = BLUtil.GetDmoProperty<Package, long?>(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)); | |||
| } | |||
| } | |||
| } | |||
| @ -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; } | |||
| } | |||
| } | |||