Example #1
0
        /// <summary>
        /// 目标单单据构建完毕,且已经创建好与源单的关联关系之后,触发此事件
        /// </summary>
        /// <param name="e"></param>
        /// <remarks>
        /// 本事件的时机,刚好能够符合需求,
        /// 而AfterConvert事件,则在执行表单服务策略之后
        /// </remarks>
        public override void OnAfterCreateLink(CreateLinkEventArgs e)
        {
            // 目标单单据体元数据
            Entity entity = e.TargetBusinessInfo.GetEntity("FEntity");
            Entity es     = e.SourceBusinessInfo.GetEntity("FSaleOrderEntry");

            // 读取已经生成的付款单
            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;
                DateTime CreateDate  = Convert.ToDateTime(bill["CreateDate"]);
                for (int i = rowCount - 1; i >= 0; i--)
                {
                    DynamicObject rowObj = rowObjs[i];
                    //获取ID为149808的供应商(内蒙)
                    DynamicObject[] superIDs = BusinessDataServiceHelper.Load(this.Context, new object[] { 149808 }, (MetaDataServiceHelper.Load(this.Context, "BD_Supplier") as FormMetadata).BusinessInfo.GetDynamicObjectType());
                    rowObj["SuggestSupplierId"]    = superIDs[0];
                    rowObj["SuggestSupplierId_Id"] = 149808;
                    rowObj["SupplierId"]           = superIDs[0];
                    rowObj["SupplierId_Id"]        = 149808;

                    long          MaterialId = Convert.ToInt64(rowObj["MaterialId_Id"]);
                    long          SupplierId = 149808;
                    DynamicObject auxprop    = rowObj["AuxpropId"] as DynamicObject;
                    string        auxpropId  = "";
                    if (auxprop != null)
                    {
                        auxpropId = Convert.ToString(auxprop["F100001_Id"]);
                    }
                    DynamicObjectCollection prices = ServiceHelper.YDLCommServiceHelper.GetAuxpropPriceListId(this.Context, MaterialId, auxpropId, SupplierId, CreateDate);
                    if (prices.Count > 0)
                    {
                        rowObj["FTAXPRICE"]     = prices[0][2];
                        rowObj["EvaluatePrice"] = prices[0][1];
                        rowObj["FTAXRATE"]      = 17;
                    }
                }
            }
        }
Example #2
0
        /// <summary>
        /// 目标单单据构建完毕,且已经创建好与源单的关联关系之后,触发此事件
        /// </summary>
        /// <param name="e"></param>
        /// <remarks>
        /// 本事件的时机,刚好能够符合需求,
        /// 而AfterConvert事件,则在执行表单服务策略之后
        /// </remarks>
        public override void OnAfterCreateLink(CreateLinkEventArgs e)
        {
            // 目标单单据体元数据
            Entity entity = e.TargetBusinessInfo.GetEntity("FSaleOrderEntry");

            //源单单单据体元数据
            //Entity es = e.SourceBusinessInfo.GetEntity("FSaleOrderEntry");

            // 读取已经生成的销售订单
            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;

                for (int i = rowCount - 1; i >= 0; i--)
                {
                    DynamicObject           rowObj       = rowObjs[i];
                    DynamicObject           FMaterialId  = rowObj["MaterialId"] as DynamicObject;
                    DynamicObjectCollection MaterialBase = FMaterialId["MaterialBase"] as DynamicObjectCollection;
                    DynamicObject           FCategoryID  = MaterialBase[0]["CategoryID"] as DynamicObject;
                    string FCategoryname = Convert.ToString(FCategoryID["Name"]);
                    if (FCategoryname == "产成品")
                    {
                        //获取ID为100440的仓库
                        DynamicObject[] STOCKIDs = BusinessDataServiceHelper.Load(this.Context, new object[] { 100440 }, (MetaDataServiceHelper.Load(this.Context, "BD_STOCK") as FormMetadata).BusinessInfo.GetDynamicObjectType());
                        rowObj["FSTOCKID_MX"] = STOCKIDs[0];
                    }

                    if (FCategoryname == "半成品")
                    {
                        //获取ID为100424的仓库
                        DynamicObject[] STOCKIDs = BusinessDataServiceHelper.Load(this.Context, new object[] { 100424 }, (MetaDataServiceHelper.Load(this.Context, "BD_STOCK") as FormMetadata).BusinessInfo.GetDynamicObjectType());
                        rowObj["FSTOCKID_MX"] = STOCKIDs[0];
                    }
                }
            }
        }
        public override void OnAfterCreateLink(CreateLinkEventArgs e)
        {
            base.OnAfterCreateLink(e);
            OperateOption  Option = base.Option;
            List <decimal> amount = new List <decimal>();

            if (Option.TryGetVariableValue <List <decimal> >("OutStockAmount", out amount))
            {
                List <int> srcbillseq = Option.GetVariableValue <List <int> >("srcbillseq");
                DateTime   FDATE      = Option.GetVariableValue <DateTime>("FDATE");
                (e.TargetExtendedDataEntities.FindByEntityKey("FBillHead"))[0].DataEntity["Date"] = FDATE;
                for (int i = 0; i < e.TargetExtendedDataEntities.FindByEntityKey("FEntity").Count(); i++)
                {
                    (e.TargetExtendedDataEntities.FindByEntityKey("FEntity"))[i].DataEntity["SALBASEQTY"]   = amount[i];
                    (e.TargetExtendedDataEntities.FindByEntityKey("FEntity"))[i].DataEntity["BaseUnitQty"]  = amount[i];
                    (e.TargetExtendedDataEntities.FindByEntityKey("FEntity"))[i].DataEntity["PRICEBASEQTY"] = amount[i];
                    (e.TargetExtendedDataEntities.FindByEntityKey("FEntity"))[i].DataEntity["Fsrcbillseq"]  = srcbillseq[i];
                }
            }
        }
        /// <summary>
        /// 目标单单据构建完毕,且已经创建好与源单的关联关系之后,触发此事件
        /// </summary>
        /// <param name="e"></param>
        /// <remarks>
        /// 本事件的时机,刚好能够符合需求,
        /// 而AfterConvert事件,则在执行表单服务策略之后
        /// </remarks>
        public override void OnAfterCreateLink(CreateLinkEventArgs e)
        {
            // 目标单单据体元数据
            Entity entity = e.TargetBusinessInfo.GetEntity("FBillEntry");

            //Entity es = e.SourceBusinessInfo.GetEntity("FEntity");

            // 读取已经生成的付款单
            ExtendedDataEntity[] bills = e.TargetExtendedDataEntities.FindByEntityKey("FBillHead");
            foreach (var bill in bills)
            {
                DynamicObjectCollection rowObjs = entity.DynamicProperty.GetValue(bill.DataEntity)
                                                  as DynamicObjectCollection;
                foreach (var rowObj in rowObjs)
                {
                    DynamicObject Material = rowObj["MaterialId"] as DynamicObject;
                    DynamicObject AuxUnit  = Material["AuxUnitID"] as DynamicObject;
                    rowObj["SecUnitId"]    = AuxUnit;
                    rowObj["ExtAuxUnitId"] = AuxUnit;
                }
            }
        }
        /// <summary>
        /// 主单据体的字段携带完毕,与源单的关联关系创建好之后,触发此事件
        /// </summary>
        /// <param name="e"></param>
        public override void OnAfterCreateLink(CreateLinkEventArgs e)
        {
            base.OnAfterCreateLink(e);
            //预先获取一些必要的元数据,后续代码要用到

            //目标单第一单据体
            Entity mainEntity = e.TargetBusinessInfo.GetEntity("FEntityDetail");



            // 获取生成的全部下游单据
            ExtendedDataEntity[] billDataEntitys = e.TargetExtendedDataEntities.FindByEntityKey("FBillHead");

            // 对下游单据,逐张单据进行处理
            foreach (var item in billDataEntitys)
            {
                DynamicObject dataObject = item.DataEntity;

                // 定义一个集合,用于收集本单对应的源单内码
                HashSet <long> srcBillIds = new HashSet <long>();

                // 开始到主单据体中,读取关联的源单内码
                DynamicObjectCollection mainEntryRows =
                    mainEntity.DynamicProperty.GetValue(dataObject) as DynamicObjectCollection;

                //获取销售价目表XSJMB0002内容
                Dictionary <long, double> disCounts = GetDiscounts(base.Context);
                //遍历应收单,通过销售折扣计算折后的含税单价赋值。
                foreach (DynamicObject mainEntryRow in mainEntryRows)
                {
                    double discount = 0.0;
                    if (disCounts.TryGetValue(Convert.ToInt64(mainEntryRow["MATERIALID_Id"]), out discount))
                    {
                        mainEntryRow["TaxPrice"] = discount;
                    }
                }
            }
        }
        /// <summary>
        /// 主单据体的字段携带完毕,与源单的关联关系创建好之后,触发此事件
        /// </summary>
        /// <param name="e"></param>
        public override void OnAfterCreateLink(CreateLinkEventArgs e)
        {
            // 预先获取一些必要的元数据,后续代码要用到:
            // 源单第二单据体,执行部门
            Entity srcSecondEntity = e.SourceBusinessInfo.GetEntity("F_PEJK_ExecuteDept");


            // 目标单第一单据体,产品明细
            //Entity mainEntity = e.TargetBusinessInfo.GetEntity("FEntity");

            // 目标单第二单据体,执行部门
            Entity secondEntity = e.TargetBusinessInfo.GetEntity("F_PEJK_OppExecuteDept");

            // 目标单关联子单据体
            //Entity linkEntity = null;
            //Form form = e.TargetBusinessInfo.GetForm();
            //if (form.LinkSet != null
            //    && form.LinkSet.LinkEntitys != null
            //    && form.LinkSet.LinkEntitys.Count != 0)
            //{
            //    linkEntity = e.TargetBusinessInfo.GetEntity(
            //        form.LinkSet.LinkEntitys[0].Key);
            //}

            //if (linkEntity == null)
            //{
            //    return;
            //}

            // 获取生成的全部下游单据
            ExtendedDataEntity[] billDataEntitys = e.TargetExtendedDataEntities.FindByEntityKey("FBillHead");

            // 对下游单据,逐张单据进行处理
            //foreach (var item in billDataEntitys)
            //{
            //    DynamicObject dataObject = item.DataEntity;
            //    // 定义一个集合,用于收集本单对应的源单内码
            //    HashSet<long> srcBillIds = new HashSet<long>();
            //    //开始到主单据体中,读取关联的源单内码
            //    DynamicObjectCollection mainEntryRows =
            //        mainEntity.DynamicProperty.GetValue(dataObject) as DynamicObjectCollection;
            //    foreach (var mainEntityRow in mainEntryRows)
            //    {
            //        DynamicObjectCollection linkRows =
            //            linkEntity.DynamicProperty.GetValue(mainEntityRow) as DynamicObjectCollection;
            //        foreach (var linkRow in linkRows)
            //        {
            //            long srcBillId = Convert.ToInt64(linkRow["SBillId"]);
            //            if (srcBillId != 0
            //                && srcBillIds.Contains(srcBillId) == false)
            //            {
            //                srcBillIds.Add(srcBillId);
            //            }
            //        }
            //    }


            //DynamicObject linkRows =
            //    linkEntity.DynamicProperty.GetValue(dataObject) as DynamicObject;
            //    long srcBillId = Convert.ToInt64(linkRows["SBillId"]);
            //    if (srcBillId != 0
            //        && srcBillIds.Contains(srcBillId) == false)
            //    {
            //        srcBillIds.Add(srcBillId);
            //    }
            //定义一个集合,用于收集本单对应的源单内码
            HashSet <long> srcBillIds = new HashSet <long>();

            foreach (var item in billDataEntitys)
            {
                DynamicObject dataObject = item.DataEntity;
                if (Convert.ToString(dataObject["FSourceBillNo"]) != null && Convert.ToString(dataObject["FSourceBillNo"]) != " ")
                {
                    string strSql    = string.Format(@"/*dialect*/select FID from T_CRM_Clue where FBILLNO = '{0}'", Convert.ToString(dataObject["FSourceBillNo"]));
                    long   srcBillId = DBUtils.ExecuteScalar <long>(this.Context, strSql, 0, null);
                    if (srcBillId != 0 &&
                        srcBillIds.Contains(srcBillId) == false)
                    {
                        srcBillIds.Add(srcBillId);
                    }
                    if (srcBillIds.Count == 0)
                    {
                        continue;
                    }
                    // 开始加载源单第二单据体上的字段

                    // 确定需要加载的源单字段(仅加载需要携带的字段)
                    List <SelectorItemInfo> selector = new List <SelectorItemInfo>();
                    selector.Add(new SelectorItemInfo("F_PEJK_ExecuteDeptId"));
                    // TODO: 继续添加其他需要携带的字段,示例代码略
                    // 设置过滤条件
                    string filter = string.Format(" {0} IN ({1}) ",
                                                  e.SourceBusinessInfo.GetForm().PkFieldName,
                                                  string.Join(",", srcBillIds));
                    OQLFilter filterObj = OQLFilter.CreateHeadEntityFilter(filter);

                    // 读取源单
                    IViewService viewService = ServiceHelper.GetService <IViewService>();
                    var          srcBillObjs = viewService.Load(this.Context,
                                                                e.SourceBusinessInfo.GetForm().Id,
                                                                selector,
                                                                filterObj);

                    // 开始把源单单据体数据,填写到目标单上
                    DynamicObjectCollection secondEntryRows =
                        secondEntity.DynamicProperty.GetValue(dataObject) as DynamicObjectCollection;
                    secondEntryRows.Clear();    // 删除空行

                    foreach (var srcBillObj in srcBillObjs)
                    {
                        DynamicObjectCollection srcEntryRows =
                            srcSecondEntity.DynamicProperty.GetValue(srcBillObj) as DynamicObjectCollection;

                        foreach (var srcEntryRow in srcEntryRows)
                        {
                            // 目标单添加新行,并接受源单字段值
                            DynamicObject newRow = new DynamicObject(secondEntity.DynamicObjectType);
                            secondEntryRows.Add(newRow);
                            // 填写字段值
                            newRow["F_PEJK_ExecuteDeptId"] = srcEntryRow["F_PEJK_ExecuteDeptId"];
                            // TODO: 逐个填写其他字段值,示例代码略
                        }
                    }
                }

                //string strSql = string.Format(@"/*dialect*/select fsbillid from T_CRM_Opportunity_LK where fid = {0}", Convert.ToInt64(dataObject["id"]));
            }
        }
        /// <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());
        }
Example #8
0
 public override void OnCreateLink(CreateLinkEventArgs e)
 {
     //不创建Link表数据。
     e.Cancel = true;
 }
        /// <summary>
        /// 主单据体的字段携带完毕,与源单的关联关系创建好之后,触发此事件
        /// </summary>
        /// <param name="e"></param>
        public override void OnAfterCreateLink(CreateLinkEventArgs e)
        {
            // 预先获取一些必要的元数据,后续代码要用到:
            // 源单第二单据体
            Entity srcSecondEntity = e.SourceBusinessInfo.GetEntity("F_PAEZ_OtherEntity");

            // 目标单第一单据体
            Entity destMainEntity = e.TargetBusinessInfo.GetEntity("FEntity");

            // 目标单第二单据体
            Entity destSecondEntity = e.TargetBusinessInfo.GetEntity("F_PAEZ_OtherEntity");

            // 目标单关联子单据体
            Entity linkEntity = null;
            Form   form       = e.TargetBusinessInfo.GetForm();

            if (form.LinkSet != null &&
                form.LinkSet.LinkEntitys != null &&
                form.LinkSet.LinkEntitys.Count != 0)
            {
                linkEntity = e.TargetBusinessInfo.GetEntity(
                    form.LinkSet.LinkEntitys[0].Key);
            }

            if (linkEntity == null)
            {
                return;
            }

            // 获取生成的全部下游单据
            ExtendedDataEntity[] billDataEntitys = e.TargetExtendedDataEntities.FindByEntityKey("FBillHead");

            // 对下游单据,逐张单据进行处理
            foreach (var item in billDataEntitys)
            {
                DynamicObject destBillObject = item.DataEntity;

                // 定义一个集合,用于收集本单对应的源单内码
                HashSet <long> srcBillIds = new HashSet <long>();

                // 开始到主单据体中,读取关联的源单内码
                DynamicObjectCollection destMainEntryRows =
                    destMainEntity.DynamicProperty.GetValue(destBillObject) as DynamicObjectCollection;
                foreach (var mainEntityRow in destMainEntryRows)
                {
                    DynamicObjectCollection linkRows =
                        linkEntity.DynamicProperty.GetValue(mainEntityRow) as DynamicObjectCollection;
                    foreach (var linkRow in linkRows)
                    {
                        long srcBillId = Convert.ToInt64(linkRow["SBillId"]);
                        if (srcBillId != 0 && srcBillIds.Contains(srcBillId) == false)
                        {
                            srcBillIds.Add(srcBillId);
                        }
                    }
                }
                if (srcBillIds.Count == 0)
                {
                    continue;
                }
                // 开始加载源单第二单据体上的字段

                // 确定需要加载的源单字段(仅加载需要携带的字段)
                List <SelectorItemInfo> selector = new List <SelectorItemInfo>();
                selector.Add(new SelectorItemInfo("F_PAEZ_Desc"));
                // TODO: 继续添加其他需要携带的字段,示例代码略
                // 设置过滤条件
                string filter = string.Format(" {0} IN ({1}) ",
                                              e.SourceBusinessInfo.GetForm().PkFieldName,
                                              string.Join(",", srcBillIds));

                OQLFilter filterObj = OQLFilter.CreateHeadEntityFilter(filter);

                // 读取源单
                IViewService viewService = ServiceHelper.GetService <IViewService>();
                var          srcBillObjs = viewService.Load(this.Context,
                                                            e.SourceBusinessInfo.GetForm().Id,
                                                            selector,
                                                            filterObj);

                // 开始把源单单据体数据,填写到目标单上
                DynamicObjectCollection destSecondEntryRows =
                    destSecondEntity.DynamicProperty.GetValue(destBillObject) as DynamicObjectCollection;
                destSecondEntryRows.Clear();    // 删除空行

                foreach (var srcBillObj in srcBillObjs)
                {
                    DynamicObjectCollection srcEntryRows =
                        srcSecondEntity.DynamicProperty.GetValue(srcBillObj) as DynamicObjectCollection;

                    foreach (var srcEntryRow in srcEntryRows)
                    {
                        // 目标单添加新行,并接受源单字段值
                        DynamicObject newRow = new DynamicObject(destSecondEntity.DynamicObjectType);
                        destSecondEntryRows.Add(newRow);
                        // 填写字段值
                        newRow["F_PAEZ_Desc"] = srcEntryRow["F_PAEZ_Desc"];
                        // TODO: 逐个填写其他字段值,示例代码略
                    }
                }
            }
        }
        /// <summary>
        /// 主单据体的字段携带完毕,与源单的关联关系创建好之后,触发此事件
        /// </summary>
        /// <param name="e"></param>
        public override void OnAfterCreateLink(CreateLinkEventArgs e)
        {
            base.OnAfterCreateLink(e);
            //预先获取一些必要的元数据,后续代码要用到
            //源单第一单据体
            Entity srcFirstEntity = e.SourceBusinessInfo.GetEntity("FEntity");

            //目标单第一单据体
            Entity mainEntity = e.TargetBusinessInfo.GetEntity("FEntityDetail");


            // 目标单关联子单据体
            Entity linkEntity = null;
            Form   form       = e.TargetBusinessInfo.GetForm();

            if (form.LinkSet != null &&
                form.LinkSet.LinkEntitys != null &&
                form.LinkSet.LinkEntitys.Count != 0)
            {
                linkEntity = e.TargetBusinessInfo.GetEntity(
                    form.LinkSet.LinkEntitys[0].Key);
            }

            if (linkEntity == null)
            {
                return;
            }

            // 获取生成的全部下游单据
            ExtendedDataEntity[] billDataEntitys = e.TargetExtendedDataEntities.FindByEntityKey("FBillHead");

            // 对下游单据,逐张单据进行处理
            foreach (var item in billDataEntitys)
            {
                DynamicObject dataObject = item.DataEntity;

                // 定义一个集合,用于收集本单对应的源单内码
                HashSet <long> srcBillIds = new HashSet <long>();

                // 开始到主单据体中,读取关联的源单内码
                DynamicObjectCollection mainEntryRows =
                    mainEntity.DynamicProperty.GetValue(dataObject) as DynamicObjectCollection;
                DynamicObject           mainEntityRow = mainEntryRows[0];
                DynamicObjectCollection linkRows      =
                    linkEntity.DynamicProperty.GetValue(mainEntityRow) as DynamicObjectCollection;
                long srcBillId = Convert.ToInt64(linkRows[0]["SBillId"]);
                if (srcBillId != 0 &&
                    srcBillIds.Contains(srcBillId) == false)
                {
                    srcBillIds.Add(srcBillId);
                }
                if (srcBillIds.Count == 0)
                {
                    continue;
                }
                #region 隐藏
                //foreach (var mainEntityRow in mainEntryRows)
                //{
                //    DynamicObjectCollection linkRows =
                //        linkEntity.DynamicProperty.GetValue(mainEntityRow) as DynamicObjectCollection;
                //    foreach (var linkRow in linkRows)
                //    {
                //        long srcBillId = Convert.ToInt64(linkRow["SBillId"]);
                //        if (srcBillId != 0
                //            && srcBillIds.Contains(srcBillId) == false)
                //        {
                //            srcBillIds.Add(srcBillId);
                //        }
                //    }
                //}
                //if (srcBillIds.Count == 0)
                //{
                //    continue;
                //}
                #endregion

                // 开始加载源单第二单据体上的字段

                // 确定需要加载的源单字段(仅加载需要携带的字段)
                List <SelectorItemInfo> selector = new List <SelectorItemInfo>();
                selector.Add(new SelectorItemInfo("FDate"));       //日期
                selector.Add(new SelectorItemInfo("FCustomerID")); //客户
                selector.Add(new SelectorItemInfo("FSaleDeptID")); //销售部门
                selector.Add(new SelectorItemInfo("FMaterialID")); //物料
                selector.Add(new SelectorItemInfo("FTaxPrice"));   //含税单价
                // TODO: 继续添加其他需要携带的字段,示例代码略
                // 设置过滤条件
                string filter = string.Format(" {0} IN ({1}) ",
                                              e.SourceBusinessInfo.GetForm().PkFieldName,
                                              string.Join(",", srcBillIds));
                OQLFilter filterObj = OQLFilter.CreateHeadEntityFilter(filter);

                // 读取源单
                Kingdee.BOS.Contracts.IViewService viewService = Kingdee.BOS.App.ServiceHelper.GetService <Kingdee.BOS.Contracts.IViewService>();
                var srcBillObjs = viewService.Load(this.Context,
                                                   e.SourceBusinessInfo.GetForm().Id,
                                                   selector,
                                                   filterObj);
                #region 隐藏
                // 开始把源单单据体数据,填写到目标单上
                //DynamicObjectCollection secondEntryRows =
                //    secondEntity.DynamicProperty.GetValue(dataObject) as DynamicObjectCollection;
                //secondEntryRows.Clear();    // 删除空行
                #endregion

                foreach (DynamicObject srcBillObj in srcBillObjs)
                {
                    DynamicObject dept = srcBillObj["SaleDeptID"] as DynamicObject; //销售部门
                    DynamicObject Cust = srcBillObj["CustomerID"] as DynamicObject; //客户
                    //bool isRight = !Cust["FKHBD"].Equals("1") && !Cust["FKHBD"].Equals("2") ? Convert.ToInt32(Cust["FSAP"]) == 2 : Convert.ToInt32(Cust["FKHBD"]) == 1 ? true: Convert.ToInt32(Cust["FKHBD"]) == 2 ? true:false;
                    //补差、丢货或者客户结算方式是现金
                    bool isRight = (Cust["FKHBD"].Equals("1") || Cust["FKHBD"].Equals("2")) ? true : Convert.ToInt32(Cust["FSAP"]) == 2 ? true : false;
                    //if ((Convert.ToInt32(Cust["FSAP"]) == 2 || Convert.ToInt32(Cust["FKHBD"]) == 1 || Convert.ToInt32(Cust["FKHBD"]) == 2) && Convert.ToInt32(dept["FDEPTTYPE"]) == 4)

                    if (isRight && Convert.ToInt32(dept["FDEPTTYPE"]) == 4)//部门类别外埠
                    {
                        //外埠现金客户执行销售政策折扣
                        Dictionary <string, double> disCounts = TLMBServiceHelper.GetDiscounts(base.Context, Convert.ToInt64(dept["id"]), Convert.ToDateTime(srcBillObj["Date"]));
                        //遍历应收单,通过销售折扣计算折后的含税单价赋值。
                        foreach (DynamicObject mainEntryRow in mainEntryRows)
                        {
                            double discount = 0.0;
                            if (disCounts.TryGetValue(Convert.ToString(((DynamicObject)mainEntryRow["MATERIALID"])["FWLFL"]), out discount))
                            {
                                double ZK = Convert.ToDouble(disCounts["" + Convert.ToString(((DynamicObject)mainEntryRow["MATERIALID"])["FWLFL"]) + ""]);
                                mainEntryRow["TaxPrice"]        = Convert.ToDouble(mainEntryRow["TaxPrice"]) * ZK;
                                mainEntryRow["F_PAEZ_DisCount"] = ZK;
                            }
                        }
                    }

                    //DynamicObjectCollection srcEntryRows =
                    //    srcSecondEntity.DynamicProperty.GetValue(srcBillObj) as DynamicObjectCollection;

                    //foreach (var srcEntryRow in srcEntryRows)
                    //{
                    //    // 目标单添加新行,并接受源单字段值
                    //    DynamicObject newRow = new DynamicObject(secondEntity.DynamicObjectType);
                    //    secondEntryRows.Add(newRow);
                    //    // 填写字段值
                    //    newRow["F_JD_Text"] = srcEntryRow["F_JD_Text"];
                    //    // TODO: 逐个填写其他字段值,示例代码略
                    //}
                }
            }
        }
Example #11
0
 public override void OnAfterCreateLink(CreateLinkEventArgs e)
 {
 }
        public override void OnAfterCreateLink(CreateLinkEventArgs e)
        {
            base.OnAfterCreateLink(e);
            //源单
            Entity srcFEntity    = e.SourceBusinessInfo.GetEntity("FEntity");
            Entity srcFEntityBPR = e.SourceBusinessInfo.GetEntity("FEntityBPR");
            Entity srcFEntityM   = e.SourceBusinessInfo.GetEntity("FEntityM");
            //Entity srcFEntityHD = e.SourceBusinessInfo.GetEntity("FEntityHD");
            //目标单
            Entity tgtFEntity    = e.TargetBusinessInfo.GetEntity("FEntity");
            Entity tgtFEntityBPR = e.TargetBusinessInfo.GetEntity("FEntityBPR");
            Entity tgtFEntityM   = e.TargetBusinessInfo.GetEntity("FEntityM");
            //Entity tgtFEntityHD = e.TargetBusinessInfo.GetEntity("FEntityHD");

            var billDataEntitys = e.TargetExtendedDataEntities.FindByEntityKey("FBillHead");

            foreach (var item in billDataEntitys)
            {
                DynamicObject dataObject = item.DataEntity;
                string        sql        = string.Format("select * from ora_CRM_Contract where FBillNo='{0}'", dataObject["FNicheID"].ToString());
                var           pkIDs      = CZDB_GetData(sql);
                if (pkIDs.Count <= 0)
                {
                    continue;
                }
                string FID = pkIDs[0]["FID"].ToString();
                //加载源单数据
                IViewService viewService = ServiceHelper.GetService <IViewService>();

                sql = string.Format("select FEntryID from ora_CRM_ContractEntry where FID='{0}'", FID);
                var srcFEntityEIDs = CZDB_GetData(sql);
                if (srcFEntityEIDs.Count > 0)
                {
                    object[] objs = new object[srcFEntityEIDs.Count];
                    for (int i = 0; i < srcFEntityEIDs.Count; i++)
                    {
                        objs[i] = srcFEntityEIDs[i]["FEntryID"].ToString();
                    }
                    var srcFEntityBillObjs = viewService.Load(this.Context, objs, srcFEntity.DynamicObjectType);
                    // 开始把源单单据体数据,填写到目标单上
                    DynamicObjectCollection tgtFEntityRows = tgtFEntity.DynamicProperty.GetValue(dataObject) as DynamicObjectCollection;
                    tgtFEntityRows.Clear();
                    foreach (var srcRow in srcFEntityBillObjs)
                    {
                        DynamicObject newRow = new DynamicObject(tgtFEntity.DynamicObjectType);
                        tgtFEntityRows.Add(newRow);
                        newRow["FMtlGroup"]   = srcRow["FMtlGroup"];
                        newRow["FDescribe"]   = srcRow["FDescribe"];
                        newRow["FQty"]        = srcRow["FQty"];
                        newRow["FModel"]      = srcRow["FModel"];
                        newRow["FIsStandard"] = srcRow["FIsStandard"];
                        newRow["FBPRndID"]    = srcRow["FBPRndID"];
                        newRow["FBRndNo"]     = srcRow["FBRndNo"];
                        newRow["FGUID"]       = srcRow["FGUID"];
                        newRow["FIS2W"]       = srcRow["FIS2W"];
                    }
                }

                /*
                 * sql = string.Format("select FBEntryID from ora_CRM_ContractBPR where FID='{0}'", FID);
                 * var srcFEntityBPREIDs = CZDB_GetData(sql);
                 * if (srcFEntityBPREIDs.Count > 0)
                 * {
                 *  object[] objs = new object[srcFEntityBPREIDs.Count];
                 *  for (int i = 0; i < srcFEntityBPREIDs.Count; i++)
                 *  {
                 *      objs[i] = srcFEntityBPREIDs[i]["FBEntryID"].ToString();
                 *  }
                 *  var srcFEntityBPRBillObjs = viewService.Load(this.Context, objs, srcFEntityBPR.DynamicObjectType);
                 *  DynamicObjectCollection tgtFEntityBPRRows = tgtFEntityBPR.DynamicProperty.GetValue(dataObject) as DynamicObjectCollection;
                 *  tgtFEntityBPRRows.Clear();
                 *  foreach (var srcRow in srcFEntityBPRBillObjs)
                 *  {
                 *      DynamicObject newRow = new DynamicObject(tgtFEntityBPR.DynamicObjectType);
                 *      tgtFEntityBPRRows.Add(newRow);
                 *      //newRow["BSEQ"] = srcRow["BSEQ"];
                 *      newRow["FBGUID"] = srcRow["FBGUID"];
                 *      newRow["FBSrcEID"] = srcRow["FBSrcEID"];
                 *      newRow["FBSrcSEQ"] = srcRow["FBSrcSEQ"];
                 *      newRow["FBPRndSEQ"] = srcRow["FBPRndSEQ"];
                 *      newRow["FBMtlGroup"] = srcRow["FBMtlGroup"];
                 *      newRow["FBMtlItem"] = srcRow["FBMtlItem"];
                 *      newRow["FMaterialID"] = srcRow["FMaterialID"];
                 *      newRow["FBDescribe"] = srcRow["FBDescribe"];
                 *      newRow["FBQty"] = srcRow["FBQty"];
                 *      newRow["FBModel"] = srcRow["FBModel"];
                 *      newRow["FBIsStandard"] = srcRow["FBIsStandard"];
                 *      newRow["FBasePrice"] = srcRow["FBasePrice"];
                 *      newRow["FBPAmt"] = srcRow["FBPAmt"];
                 *      newRow["FBPAmtGroup"] = srcRow["FBPAmtGroup"];
                 *      newRow["FBRptPrice"] = srcRow["FBRptPrice"];
                 *      newRow["FBAbaComm"] = srcRow["FBAbaComm"];
                 *      newRow["FBDownPoints"] = srcRow["FBDownPoints"];
                 *      newRow["FBWorkDay"] = srcRow["FBWorkDay"];
                 *      newRow["FBCostAdj"] = srcRow["FBCostAdj"];
                 *      newRow["FBCAReason"] = srcRow["FBCAReason"];
                 *      newRow["FBDelivery"] = srcRow["FBDelivery"];
                 *      newRow["FBPAmtLc"] = srcRow["FBPAmtLc"];
                 *      newRow["FBRptPrcLc"] = srcRow["FBRptPrcLc"];
                 *      newRow["FBIS2W"] = srcRow["FBIS2W"];
                 *      newRow["FBUnitID"] = srcRow["FBUnitID"];
                 *      newRow["FBTaxRateID"] = srcRow["FBTaxRateID"];
                 *      newRow["FBTaxRate"] = srcRow["FBTaxRate"];
                 *      newRow["FBBomVsn"] = srcRow["FBBomVsn"];
                 *      newRow["FBTaxPrice"] = srcRow["FBTaxPrice"];
                 *      newRow["FBNTPrice"] = srcRow["FBNTPrice"];
                 *      newRow["FBTaxAmt"] = srcRow["FBTaxAmt"];
                 *      newRow["FBNTAmt"] = srcRow["FBNTAmt"];
                 *
                 *      newRow["FBRangeAmtOne"] = srcRow["FBRangeAmtOne"];
                 *      newRow["FBRangeAmtGP"] = srcRow["FBRangeAmtGP"];
                 *      newRow["FBRangeAmtReason"] = srcRow["FBRangeAmtReason"];
                 *      newRow["FProdFactory"] = srcRow["FProdFactory"];
                 *      //newRow["FBLkQty"] = srcRow["FBLkQty"];
                 *  }
                 * }
                 */
                sql = string.Format("select FEntryIDM from ora_CRM_ContractMtl where FID='{0}'", FID);
                var srcFEntityMEIDs = CZDB_GetData(sql);
                if (srcFEntityMEIDs.Count > 0)
                {
                    object[] objs = new object[srcFEntityMEIDs.Count];
                    for (int i = 0; i < srcFEntityMEIDs.Count; i++)
                    {
                        objs[i] = srcFEntityMEIDs[i]["FEntryIDM"].ToString();
                    }
                    var srcFEntityMBillObjs = viewService.Load(this.Context, objs, srcFEntityM.DynamicObjectType);
                    DynamicObjectCollection tgtFEntityMRows = tgtFEntityM.DynamicProperty.GetValue(dataObject) as DynamicObjectCollection;
                    tgtFEntityMRows.Clear();
                    foreach (var srcRow in srcFEntityMBillObjs)
                    {
                        DynamicObject newRow = new DynamicObject(tgtFEntityM.DynamicObjectType);
                        tgtFEntityMRows.Add(newRow);
                        newRow["FMGUID"]     = srcRow["FMGUID"];
                        newRow["FMSrcEID"]   = srcRow["FMSrcEID"];
                        newRow["FMSrcSEQ"]   = srcRow["FMSrcSEQ"];
                        newRow["FMMtlGroup"] = srcRow["FMMtlGroup"];
                        newRow["FMMtlItem"]  = srcRow["FMMtlItem"];
                        newRow["FMClass"]    = srcRow["FMClass"];
                        newRow["FMMtl"]      = srcRow["FMMtl"];
                        newRow["FMModel"]    = srcRow["FMModel"];
                        newRow["FMQty"]      = srcRow["FMQty"];
                        newRow["FMUnit"]     = srcRow["FMUnit"];
                        newRow["FMPrice"]    = srcRow["FMPrice"];
                        newRow["FMAmt"]      = srcRow["FMAmt"];
                        newRow["FMGpAmtB"]   = srcRow["FMGpAmtB"];
                        newRow["FMCostRate"] = srcRow["FMCostRate"];
                        newRow["FMCost"]     = srcRow["FMCost"];
                        newRow["FMGPRate"]   = srcRow["FMGPRate"];
                        newRow["FMGP"]       = srcRow["FMGP"];
                        newRow["FMGpAmt"]    = srcRow["FMGpAmt"];
                        newRow["FMGpAmtLc"]  = srcRow["FMGpAmtLc"];
                        newRow["FMIS2W"]     = srcRow["FMIS2W"];
                    }
                }
            }
        }
        /// <summary>
        /// 下推
        /// </summary>
        /// <param name="e"></param>
        public override void OnAfterCreateLink(CreateLinkEventArgs e)
        {
            try
            {
                string sql = "";
                // 源单单据体元数据
                var sourceEntitylist = e.SourceBusinessInfo.GetEntity("FBillHead");
                //目标单据体数据
                var extend = e.TargetExtendedDataEntities.FindByEntityKey("FBillHead").FirstOrDefault().DataEntity;
                if (extend == null)
                {
                    return;
                }
                //获取付款单明细数据
                var Item = extend["FPAYAPPLYENTRY"] as DynamicObjectCollection;
                for (int a = Item.Count; a > 0; a--)
                {
                    //订单明细内码
                    string FORDERENTRYID = Item[a - 1]["FORDERENTRYID"].ToString();
                    //物料
                    string FMATERIALID = Item[a - 1]["FMATERIALID_Id"].ToString();
                    sql = string.Format(@"select ar.arFALLAMOUNTFOR as 应收金额,sk.skFREALRECAMOUNT as 收款金额, sal.F_YBG_BUSINESSMODEL as 业务模式 from t_PUR_POOrderEntry c   
                                              inner join T_PUR_POORDERENTRY_LK d on d.FENTRYID=c.FENTRYID 
                                              inner join T_SAL_ORDERENTRY f on d.FSID=f.FENTRYID 
                                              inner join T_SAL_ORDERENTRY_F g on f.FENTRYID=g.FENTRYID
											  left  join T_SAL_ORDER sal on sal.FID=f.FENTRYID
											  left join (select sum(are.FALLAMOUNTFOR) as  arFALLAMOUNTFOR  ,FORDERENTRYID  from  T_AR_RECEIVABLE ar 
                                              inner join T_AR_RECEIVABLEENTRY arE  on ar.FID=are.FID where ar.FDOCUMENTSTATUS='C' and ar.FBILLTYPEID='5d18aa0e58407c' and ar.FSETACCOUNTTYPE='3' 
											  group by FORDERENTRYID)ar on ar.FORDERENTRYID=f.FENTRYID
				                              left  join (select FORDERENTRYID, sum(a.FREALRECAMOUNT) as  skFREALRECAMOUNT from T_AR_RECEIVEBILLSRCENTRY  a 
				                              left join T_AR_RECEIVEBILL b on a.FId=b.FID where b.FDOCUMENTSTATUS='C' group by FORDERENTRYID) sk on sk.FORDERENTRYID=f.FENTRYID
                                              where c.FENTRYID='{0}'", FORDERENTRYID);
                    DataSet   ds = DBServiceHelper.ExecuteDataSet(this.Context, sql);
                    DataTable dt = ds.Tables[0];
                    if (dt.Rows.Count > 0)
                    {
                        for (int i = 0; i < dt.Rows.Count; i++)
                        {
                            //业务模式
                            string F_YBG_BusinessModel = string.IsNullOrEmpty(dt.Rows[i]["业务模式"].ToString()) ? "" : dt.Rows[i]["业务模式"].ToString();
                            //只有挂靠的才会收到货款的时候就付款
                            if (F_YBG_BusinessModel == "01" || F_YBG_BusinessModel == "04")
                            {
                                //价税合计
                                decimal FALLAMOUNT = Convert.ToDecimal(dt.Rows[i]["应收金额"].ToString());

                                //收款金额
                                decimal FREALRECAMOUNT = Convert.ToDecimal(dt.Rows[i]["收款金额"].ToString());

                                //比例
                                decimal proportion = FREALRECAMOUNT / FALLAMOUNT;

                                if (proportion == 0)
                                {
                                    Item.RemoveAt(a - 1);
                                }
                                else
                                {
                                    //付款申请金额
                                    Item[a - 1]["FAPPLYAMOUNTFOR"] = Convert.ToDecimal(Item[a - 1]["FAPPLYAMOUNTFOR"]) * proportion;
                                }
                            }
                        }
                    }
                }
                if (Item.Count == 0)
                {
                    throw new Exception("未收到回款,禁止下推付款申请单");
                }
            }
            catch (Exception ex)
            {
                throw new Exception("当前单据下推报错:" + ex.ToString());
            }
        }