Exemple #1
0
        /// <summary>
        /// 移动表格分录
        /// </summary>
        /// <param name="view"></param>
        /// <param name="entityKey"></param>
        /// <param name="iSrcRowIndex"></param>
        /// <param name="iDstRowIndex"></param>
        /// <param name="callback"></param>
        public static void MoveEntryRow(this IDynamicFormView view, string entityKey, int iSrcRowIndex, int iDstRowIndex, Action <int, int> callback = null)
        {
            EntryEntity             entryEntity  = view.BillBusinessInfo.GetEntryEntity(entityKey);
            DynamicObjectCollection dataEntities = view.Model.GetEntityDataObject(entryEntity);

            if (iSrcRowIndex < 0 || iSrcRowIndex >= dataEntities.Count)
            {
                return;
            }
            if (iDstRowIndex < 0 || iDstRowIndex >= dataEntities.Count)
            {
                return;
            }
            var srcRow = dataEntities[iSrcRowIndex];
            var dstRow = dataEntities[iDstRowIndex];

            if (iSrcRowIndex > iDstRowIndex)
            {
                dataEntities.RemoveAt(iSrcRowIndex);
                dataEntities.Insert(iDstRowIndex, srcRow);
            }
            else
            {
                dataEntities.RemoveAt(iDstRowIndex);
                dataEntities.Insert(iSrcRowIndex, dstRow);
            }

            EntryGrid grid = view.GetControl <EntryGrid>(entityKey);

            grid.ExchangeRowIndex(iSrcRowIndex, iDstRowIndex);
            grid.SetFocusRowIndex(iDstRowIndex);

            if (callback != null)
            {
                callback(iSrcRowIndex, iDstRowIndex);
            }
        }
Exemple #2
0
        /// <summary>
        /// 移动表格分录,保证模型与视图索引匹配
        /// </summary>
        /// <param name="view"></param>
        /// <param name="entityKey"></param>
        /// <param name="selRows"></param>
        /// <param name="iTargetPos"></param>
        /// <param name="isRelativePos"></param>
        /// <param name="callback"></param>
        public static void MoveEntryRow(this IDynamicFormView view, string entityKey, int[] selRows, int iTargetPos, bool isRelativePos = true, Action <int[], int, bool> callback = null)
        {
            if (selRows == null || selRows.Any() == false)
            {
                return;
            }

            var entryEntity = view.BillBusinessInfo.GetEntity(entityKey);
            DynamicObjectCollection dataEntities = view.Model.GetEntityDataObject(entryEntity);

            DynamicObject targetRowObj = null;

            if (!isRelativePos)
            {
                if (iTargetPos < 0 || iTargetPos >= dataEntities.Count)
                {
                    return;
                }

                targetRowObj = view.Model.GetEntityDataObject(entryEntity, iTargetPos);
                if (targetRowObj == null)
                {
                    return;
                }
            }

            var selRowObjItems = selRows.Select(o => view.Model.GetEntityDataObject(entryEntity, o))
                                 .ToList();

            List <int> lstNewSelRows = new List <int>();

            for (int i = selRowObjItems.Count - 1; i >= 0; i--)
            {
                if (selRowObjItems[i] == null)
                {
                    continue;
                }

                var selRowObj       = selRowObjItems[i];
                int iSrcRowIndex    = view.Model.GetRowIndex(entryEntity, selRowObj);
                int iTargetRowIndex = iSrcRowIndex + iTargetPos;
                if (!isRelativePos)
                {
                    iTargetRowIndex = view.Model.GetRowIndex(entryEntity, targetRowObj);
                }

                if (iTargetRowIndex > dataEntities.Count - 1 || iTargetRowIndex < 0)
                {
                    continue;
                }

                dataEntities.Remove(selRowObj);
                dataEntities.Insert(iTargetRowIndex, selRowObj);
                lstNewSelRows.Add(iTargetRowIndex);
            }

            int iSeq = 1;

            foreach (var dataEntity in dataEntities)
            {
                if (entryEntity.SeqDynamicProperty != null)
                {
                    entryEntity.SeqDynamicProperty.SetValue(dataEntity, iSeq++);
                }
            }

            if (callback != null)
            {
                callback(selRows, iTargetPos, isRelativePos);
            }

            view.UpdateView(entityKey);

            if (lstNewSelRows.IsEmpty())
            {
                lstNewSelRows.AddRange(selRows);
            }
            if (lstNewSelRows.Any())
            {
                EntryGrid grid = view.GetControl <EntryGrid>(entityKey);
                grid.SelectRows(lstNewSelRows.ToArray());
                grid.SetFocusRowIndex(lstNewSelRows.Last());
            }
        }
        /// <summary>
        /// 目标单单据构建完毕,且已经创建好与源单的关联关系之后,触发此事件
        /// </summary>
        /// <param name="e"></param>
        /// <remarks>
        /// 本事件的时机,刚好能够符合需求,
        /// 而AfterConvert事件,则在执行表单服务策略之后
        /// </remarks>
        public override void OnAfterCreateLink(CreateLinkEventArgs e)
        {
            // 目标单单据体元数据
            Entity entity = e.TargetBusinessInfo.GetEntity("FRefundBillSrcEntity");
            Entity es     = e.SourceBusinessInfo.GetEntity("FEntity");

            // 读取已经生成的付款退款单
            ExtendedDataEntity[] bills = e.TargetExtendedDataEntities.FindByEntityKey("FBillHead");

            // 定义一个集合,存储新拆分出来的单据体行
            List <ExtendedDataEntity> newRows = new List <ExtendedDataEntity>();

            // 对目标单据进行循环
            foreach (var bill in bills)
            {
                // 取单据体集合
                DynamicObjectCollection rowObjs = entity.DynamicProperty.GetValue(bill.DataEntity)
                                                  as DynamicObjectCollection;



                // 对单据体进行循环:从后往前循环,新拆分的行,避开循环
                int rowCount    = rowObjs.Count;
                int newRowCount = 1;
                for (int i = rowCount - 1; i >= 0; i--)
                {
                    DynamicObject rowObj = rowObjs[i];

                    double        F_JNRoadAmount    = Convert.ToDouble(rowObj["F_JNRoadAmount"]);
                    double        PLANPAYAMOUNT     = Convert.ToDouble(rowObj["PLANREFUNDAMOUNT"]);
                    double        AFTTAXTOTALAMOUNT = Convert.ToDouble(rowObj["AFTTAXTOTALAMOUNT"]);
                    double        F_JNTAXAmount     = Convert.ToDouble(rowObj["F_JNTAXAmount"]);
                    DynamicObject newRowObj         = null;


                    rowObj["PLANREFUNDAMOUNT"]  = PLANPAYAMOUNT - F_JNRoadAmount - F_JNTAXAmount;
                    rowObj["AFTTAXTOTALAMOUNT"] = AFTTAXTOTALAMOUNT - F_JNRoadAmount - F_JNTAXAmount;
                    rowObj["REALREFUNDAMOUNT"]  = rowObj["PLANREFUNDAMOUNT"];
                    rowObj["F_JNRoadAmount"]    = 0;
                    // 根据规则进行拆分:
                    // 示例代码略过拆分规则,强制对每行进行拆分
                    // 通过复制的方式,产生新行:确保字段值、关联关系与原行一致
                    if (F_JNRoadAmount > 0)
                    {
                        var           SRCCOSTID = rowObj["FSRCCOSTID"] as DynamicObject;
                        DynamicObject SRCCOST   = (DynamicObject)SRCCOSTID.Clone(true, false);
                        newRowObj = (DynamicObject)rowObj.Clone(false, true);
                        //DynamicObject newRowObj = rowObj.Clone(;
                        //DynamicObject newRowObj = (DynamicObject)rowObj.Clone(true, true);
                        newRowObj["PLANREFUNDAMOUNT"]  = F_JNRoadAmount;
                        newRowObj["AFTTAXTOTALAMOUNT"] = F_JNRoadAmount;
                        newRowObj["F_JNRoadAmount"]    = 0;
                        newRowObj["REALREFUNDAMOUNT"]  = F_JNRoadAmount;
                        //newRowObj["Seq"] = i + 1;

                        QueryBuilderParemeter queryParam = new QueryBuilderParemeter();
                        queryParam.FormId = "BD_Expense";

                        queryParam.SelectItems.Add(new SelectorItemInfo("FMasterId"));
                        queryParam.SelectItems.Add(new SelectorItemInfo("FNumber"));
                        queryParam.SelectItems.Add(new SelectorItemInfo("FName"));
                        queryParam.FilterClauseWihtKey = string.Format(" FNumber = '{0}' ", "FYXM23");
                        var expense = QueryServiceHelper.GetDynamicObjectCollection(this.Context, queryParam);
                        newRowObj["FSRCCOSTID_Id"] = expense[0]["FMasterId"];
                        SRCCOST["Id"]           = expense[0]["FMasterId"];
                        SRCCOST["msterId"]      = expense[0]["FMasterId"];
                        SRCCOST["Name"]         = expense[0]["FName"];
                        SRCCOST["Number"]       = expense[0]["FNumber"];
                        newRowObj["FSRCCOSTID"] = SRCCOST;


                        // 把新行,插入到单据中,排在当前行之后
                        rowObjs.Insert(i + 1, newRowObj);

                        //newRowObj["SRCCOSTID_Id"] = 131120;
                    }

                    if (F_JNTAXAmount > 0)
                    {
                        var           SRCCOSTID = rowObj["FSRCCOSTID"] as DynamicObject;
                        DynamicObject SRCCOST   = (DynamicObject)SRCCOSTID.Clone(true, false);

                        newRowObj = (DynamicObject)rowObj.Clone(false, true);
                        //DynamicObject newRowObj = rowObj.Clone(;
                        //DynamicObject newRowObj = (DynamicObject)rowObj.Clone(true, true);
                        newRowObj["PLANREFUNDAMOUNT"]  = F_JNTAXAmount;
                        newRowObj["AFTTAXTOTALAMOUNT"] = F_JNTAXAmount;
                        newRowObj["F_JNRoadAmount"]    = 0;
                        newRowObj["REALREFUNDAMOUNT"]  = F_JNTAXAmount;
                        //newRowObj["Seq"] = i + 1;

                        QueryBuilderParemeter queryParam = new QueryBuilderParemeter();
                        queryParam.FormId = "BD_Expense";

                        queryParam.SelectItems.Add(new SelectorItemInfo("FMasterId"));
                        queryParam.SelectItems.Add(new SelectorItemInfo("FNumber"));
                        queryParam.SelectItems.Add(new SelectorItemInfo("FName"));
                        queryParam.FilterClauseWihtKey = string.Format(" FNumber = '{0}' ", "FYXM98");
                        var expense = QueryServiceHelper.GetDynamicObjectCollection(this.Context, queryParam);
                        newRowObj["FSRCCOSTID_Id"] = expense[0]["FMasterId"];
                        SRCCOST["Id"]           = expense[0]["FMasterId"];
                        SRCCOST["msterId"]      = expense[0]["FMasterId"];
                        SRCCOST["Name"]         = expense[0]["FName"];
                        SRCCOST["Number"]       = expense[0]["FNumber"];
                        newRowObj["FSRCCOSTID"] = SRCCOST;


                        // 把新行,插入到单据中,排在当前行之后
                        rowObjs.Insert(i + 1, newRowObj);

                        //newRowObj["SRCCOSTID_Id"] = 131120;
                    }
                    if (newRowObj != null)
                    {
                        // 为新行创建一个ExtendedDataEntity对象,表单服务策略需要此对象
                        ExtendedDataEntity newRow = new ExtendedDataEntity(
                            newRowObj, bill.DataEntityIndex, rowCount + newRowCount);
                        newRows.Add(newRow);

                        newRowCount++;
                    }
                }
            }

            // 把新拆分出来的单据体行,加入到下推结果中
            // 特别说明:如果去掉此语句,新拆分的行,不会执行表单服务策略
            e.TargetExtendedDataEntities.AddExtendedDataEntities("FEntity", newRows.ToArray());
        }