| @ -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; } | |||||
| } | |||||
| } | |||||