123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- package fi.em.formPlugin;
- import com.kingdee.bos.qing.publish.model.BillModel;
- import fi.em.service.PayamountCalcExt;
- import kd.bos.dataentity.entity.DynamicObject;
- import kd.bos.dataentity.entity.DynamicObjectCollection;
- import kd.bos.entity.datamodel.events.ChangeData;
- import kd.bos.entity.datamodel.events.PropertyChangedArgs;
- import kd.bos.list.plugin.AbstractListPlugin;
- import kd.bos.orm.query.QCP;
- import kd.bos.orm.query.QFilter;
- import kd.bos.servicehelper.BusinessDataServiceHelper;
- import kd.bos.servicehelper.operation.SaveServiceHelper;
- import kd.fi.er.business.daily.reimburse.AmountObject;
- import kd.fi.er.mservice.ext.IErService4Ext;
- import kd.sdk.plugin.Plugin;
- import java.math.BigDecimal;
- /**
- * @author cjz
- * @date 2024/8/13 18:00
- * @description:计算收款金额
- */
- public class AmountEditPlugin extends AbstractListPlugin implements Plugin,IErService4Ext {
- public static String nckd_unexporiusedamount="nckd_unexporiusedamount";//冲销金额标识
- public static String nckd_er_tripreimburse_ext="nckd_er_tripreimburse_ext";//差旅报销单标识
- public static String orientryamount="orientryamount";//报销金额字段标识
- private static String er_prepaybill = "er_prepaybill";//预付借款单标识
- @Override
- public void propertyChanged(PropertyChangedArgs e)
- {
- super.beforePropertyChanged(e);
- String name = e.getProperty().getName();
- //重新出发付现金额计算
- if(nckd_unexporiusedamount.equals(name))
- {
- DynamicObject data=this.getModel().getDataEntity();//获取单据模型
- DynamicObjectCollection tripentry = data.getDynamicObjectCollection("tripentry");//获取形成信息分录
- //付现金额触发
- for (DynamicObject item:tripentry) {
- DynamicObjectCollection entryentity_cl=item.getDynamicObjectCollection("entryentity");//差旅明细分录
- for (int i=0;i< entryentity_cl.size();i++) {
- //判断报销金额是否有值
- if (entryentity_cl.get(i).getBigDecimal("orientryamount").compareTo(BigDecimal.ZERO)>0) {
- BigDecimal amount=entryentity_cl.get(i).getBigDecimal("orientryamount");
- this.getModel().setValue("orientryamount",0,i);
- this.getModel().setValue("orientryamount",amount,i);
- break;
- }
- }
- }
- }
- if (nckd_unexporiusedamount.equals(name)||orientryamount.equals(name))
- {
- DynamicObject data=this.getModel().getDataEntity();//获取单据模型
- //冲销金额总数
- BigDecimal orgiexpebalanceamount_sum = new BigDecimal("0");
- //费用合计
- BigDecimal amountfy=new BigDecimal("0");
- //行程信息
- DynamicObjectCollection tripentry = data.getDynamicObjectCollection("tripentry");//获取形成信息分录
- for (DynamicObject item:tripentry) {
- DynamicObjectCollection entryentity_cl=item.getDynamicObjectCollection("entryentity");//差旅明细分录
- for (int i=0;i< entryentity_cl.size();i++) {
- //报销金额总和
- amountfy=amountfy.add(entryentity_cl.get(i).getBigDecimal("orientryamount"));
- }
- }
- //amountfy报销金额总和
- DynamicObjectCollection nckd_clearloanentry = data.getDynamicObjectCollection("nckd_clearloanentry");//获取冲预付借款分录
- for (DynamicObject entryentity:nckd_clearloanentry)
- {
- //冲销金额
- BigDecimal orgiexpebalanceamount=entryentity.getBigDecimal("nckd_unexporiusedamount");
- //冲销金额累加计算
- orgiexpebalanceamount_sum=orgiexpebalanceamount_sum.add(orgiexpebalanceamount);
- }
- //计算收款金额
- this.getModel().setValue("orireceiveamount",amountfy.subtract(orgiexpebalanceamount_sum),0);
- //反写预付借款单未核销金额(借款余额)
- //获取冲预付借款分录
- nckd_clearloanentry=data.getDynamicObjectCollection("nckd_clearloanentry");
- //获取分录改变行号
- int number=e.getChangeSet()[0].getRowIndex();
- //数据id
- Long id=nckd_clearloanentry.get(number).getLong("nckd_bigintfield");
- //冲销金额
- BigDecimal nckd_unexporiusedamount=nckd_clearloanentry.get(number).getBigDecimal("nckd_unexporiusedamount");
- //借款余额
- BigDecimal nckd_exporiusedamount=nckd_clearloanentry.get(number).getBigDecimal("nckd_exporiusedamount");
- //获取改变行预付单借款编号
- String nckd_billno=nckd_clearloanentry.get(number).getString("nckd_billno");
- //根据行号查询预付借款单预付信息数据
- QFilter nckd_orgamountFilter = new QFilter("billno", QCP.equals, nckd_billno);
- DynamicObject[] nckd_orgamountaccount = BusinessDataServiceHelper.
- load(er_prepaybill, "id,number", new QFilter[]{nckd_orgamountFilter});
- for (int i=0;i<nckd_orgamountaccount.length;i++) {
- DynamicObject dynamicObject = BusinessDataServiceHelper.
- loadSingle(nckd_orgamountaccount[i].getPkValue(), nckd_orgamountaccount[i].getDynamicObjectType().getName());
- //获取预付信息分录
- DynamicObjectCollection expenseentryentity=dynamicObject.getDynamicObjectCollection("expenseentryentity");
- for (DynamicObject list:expenseentryentity) {
- Long listid=list.getLong("id");
- if (listid.equals(id)) {
- //未核销金额(借款余额)=借款余额-冲销金额
- list.set("nckd_settleamount_et",nckd_exporiusedamount.subtract(nckd_unexporiusedamount));
- SaveServiceHelper.save(new DynamicObject[]{dynamicObject});
- }
- }
- }
- }
- }
- }
|