usingKingdee.BOS.Core.Validation;usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Linq;usingSystem.Text;usingKingdee.BOS.Core;usingKingdee.BOS.Orm.DataEntity;usingKingdee.BOS.Core.Metadata.ConvertElement;usingKingdee.K3.FIN.Core;usingKingdee.BOS.App.Data;usingKingdee.BOS;namespaceMyPlugin.ServicePlugIn{publicclassMyOperationPlugin:AbstractOperationServicePlugIn{///
///添加校验器//////
publicoverridevoidOnAddValidators(AddValidatorsEventArgse){varsaveValidatorForAPAndApply=newSaveValidatorForAPAndApply();operValidator.AlwaysValidate=true;operValidator.EntityKey="FBillHead";e.Validators.Add(saveValidatorForAPAndApply);}//////当前操作的校验器///privateclassSaveValidatorForAPAndApply:AbstractValidator{publicoverridevoidValidate(ExtendedDataEntity[]dataEntities,ValidateContextvalidateContext,BOS.Contextctx){if(dataEntities==null){return;}stringstrErrorMsg=string.Empty;foreach(ExtendedDataEntityentityDataindataEntities){DynamicObjectCollectionentryList=entityData["FPAYAPPLYENTRY"]asDynamicObjectCollection;if(entryList==null){continue;}foreach(varentryinentryList){//申请付款金额decimalapplyAmountFor=Convert.ToDecimal(entry["FAPPLYAMOUNTFOR"]);stringpurBillNo=Convert.ToString(entry["FSRCBILLNO"]);stringentryId=Convert.ToString(entry["Id"]);if(!Convert.ToString(entry["FSOURCETYPE"]).Equals("PUR_PurchaseOrder")||purBillNo==""){continue;}decimal[]amount=newdecimal[4];if(applyAmountFor>getDecimal(ctx,purBillNo,entryId,outamount)){ValidationErrorInfovalidationErrorInfo=newValidationErrorInfo(string.Empty,Convert.ToString(entityData["id"]),entityData.DataEntityIndex,entityData.RowIndex,Convert.ToString(entityData["id"]),string.Format("第{0}行分录申请付款金额{1}>采购预付金额{2}-(财务应付金额{3}+(付款申请关联金额{4}-当前分录付款关联金额{5})-财务应付已结算金额{6})",entry["seq"],applyAmountFor,amount[0],amount[1],amount[2],amount[4],amount[3]),string.Empty);validateContext.AddError(entityData,validationErrorInfo);}}}}////////////////////////publicdecimalgetDecimal(Contextctx,stringpurBillNo,stringentryId,outdecimal[]amount){stringsql1=string.Format(@"selectsum(apEntry.FALLAMOUNTFOR)asAmountAPAll,sum(apEntry.FPAYMENTAMOUNT)asAmountPayMentfromT_AP_PAYABLEENTRYapEntryinnerjoinT_AP_PAYABLEapMainonapEntry.fid=apMain.fidwhereFORDERNUMBER='{0}'andapMain.FSETACCOUNTTYPE='3'",purBillNo);stringsql2=string.Format(@"selectpayPlan.FAPPLYAMOUNTasAmountApply,payPlan.FYFAMOUNTasAmountAllfromT_PUR_POORDERINSTALLMENTpayPlaninnerjoint_PUR_POOrderpurMainonpayPlan.FID=purMain.FIDwherepurMain.FBILLNO='{0}'",purBillNo);stringsql3=string.Format(@"selectFAPPLYAMOUNTFORfromT_CN_PayApplyentrywherefentryid={0}andFSRCBILLNO='{1}'",entryId,purBillNo);varamountAP=DBUtils.ExecuteDynamicObject(ctx,sql1);decimalamountAPAll=0,amountPayMent=0;if(amountAP.Count>0){amountAPAll=Convert.ToDecimal(DBUtils.ExecuteDynamicObject(ctx,sql1).FirstOrDefault()["AmountAPAll"]);amountPayMent=Convert.ToDecimal(DBUtils.ExecuteDynamicObject(ctx,sql1).FirstOrDefault()["AmountPayMent"]);}varamountPurPlan=DBUtils.ExecuteDynamicObject(ctx,sql2);decimalamountApply=0,amountAll=0;if(amountPurPlan.Count>0){amountApply=Convert.ToDecimal(amountPurPlan.FirstOrDefault()["AmountApply"]);amountAll=Convert.ToDecimal(amountPurPlan.FirstOrDefault()["AmountAll"]);}//当前分录付款关联金额varamountPayApply=DBUtils.ExecuteDynamicObject(ctx,sql3);decimalamountThis=0;if(amountPayApply.Count>0){amountThis=Convert.ToDecimal(amountPayApply.FirstOrDefault()["FAPPLYAMOUNTFOR"]);}amount=newdecimal[5];amount[0]=amountAll;amount[1]=amountAPAll;amount[2]=amountApply;amount[3]=amountPayMent;amount[4]=amountThis;returnamountAll-(amountAPAll+(amountApply-amountThis)-amountPayMent);}}}