1.入库单下推支出合同结算单工作流插件
This commit is contained in:
parent
1955726e15
commit
11479d90fb
|
@ -0,0 +1,268 @@
|
|||
package zcgj.zcdev.zcdev.pr.plugin.workflow;
|
||||
|
||||
|
||||
import kd.bos.dataentity.entity.DynamicObject;
|
||||
import kd.bos.dataentity.entity.DynamicObjectCollection;
|
||||
import kd.bos.dataentity.utils.StringUtils;
|
||||
import kd.bos.entity.datamodel.IDataModel;
|
||||
import kd.bos.orm.query.QCP;
|
||||
import kd.bos.orm.query.QFilter;
|
||||
import kd.bos.servicehelper.BusinessDataServiceHelper;
|
||||
import kd.bos.servicehelper.botp.BFTrackerServiceHelper;
|
||||
import kd.bos.servicehelper.operation.SaveServiceHelper;
|
||||
import kd.bos.workflow.api.AgentExecution;
|
||||
import kd.bos.workflow.engine.extitf.IWorkflowPlugin;
|
||||
import kd.ec.contract.common.enums.DirectionEnum;
|
||||
import kd.ec.contract.common.enums.PayDirectionEnum;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* 入库单计算支出合同结算单金额插件
|
||||
*/
|
||||
public class MaterialInAmountToItemEntryWorkFlowPlugin implements IWorkflowPlugin {
|
||||
|
||||
@Override
|
||||
public void notify(AgentExecution execution) {
|
||||
String eventName = execution.getEventName();
|
||||
String businessKey = execution.getBusinessKey();
|
||||
String entityNumber = execution.getEntityNumber();
|
||||
//入库单
|
||||
DynamicObject materialBill = BusinessDataServiceHelper.loadSingle(businessKey, entityNumber);
|
||||
|
||||
Map<String, HashSet<Long>> sourceBills = BFTrackerServiceHelper.findTargetBills(entityNumber, new Long[]{Long.valueOf(businessKey)});
|
||||
HashSet<Long> outContractSettleMap = sourceBills.get("ec_out_contract_settle");
|
||||
if(outContractSettleMap != null && !outContractSettleMap.isEmpty()) {
|
||||
Long dataId = (Long) outContractSettleMap.toArray()[0];
|
||||
DynamicObject outContractSettle = BusinessDataServiceHelper.loadSingle(dataId, "ec_out_contract_settle");
|
||||
sumMaterialInAmountToItemEntry(outContractSettle);
|
||||
calAllTypeAmount(outContractSettle);
|
||||
SaveServiceHelper.save(new DynamicObject[]{outContractSettle});
|
||||
}
|
||||
}
|
||||
|
||||
protected void sumMaterialInAmountToItemEntry(DynamicObject outContractSettle) {
|
||||
DynamicObjectCollection materialInEntry = outContractSettle.getDynamicObjectCollection("materialinentry");
|
||||
if (materialInEntry != null && materialInEntry.size() != 0) {
|
||||
BigDecimal amount = BigDecimal.ZERO;
|
||||
BigDecimal ofTaxAmount = BigDecimal.ZERO;
|
||||
boolean isSettleTrans = false;
|
||||
BigDecimal transAmount = BigDecimal.ZERO;
|
||||
BigDecimal transOfTaxAmount = BigDecimal.ZERO;
|
||||
|
||||
for(DynamicObject materialInData : materialInEntry) {
|
||||
BigDecimal materialTaxAmount = materialInData.getBigDecimal("mattaxamount");
|
||||
BigDecimal materialNoTaxAmount = materialInData.getBigDecimal("matnotaxamount");
|
||||
amount = amount.add(materialNoTaxAmount);
|
||||
ofTaxAmount = ofTaxAmount.add(materialTaxAmount);
|
||||
boolean settleTrans = materialInData.getBoolean("istranssettle");
|
||||
if (settleTrans) {
|
||||
BigDecimal transTaxAmount = materialInData.getBigDecimal("transtaxamount");
|
||||
BigDecimal transNoTaxAmount = materialInData.getBigDecimal("transnotaxamount");
|
||||
transAmount = transAmount.add(transNoTaxAmount);
|
||||
transOfTaxAmount = transOfTaxAmount.add(transTaxAmount);
|
||||
isSettleTrans = true;
|
||||
}
|
||||
}
|
||||
|
||||
DynamicObjectCollection itementry = outContractSettle.getDynamicObjectCollection("itementry");
|
||||
DynamicObject dynamicObject = itementry.get(0);
|
||||
|
||||
dynamicObject.set("oftaxamount", ofTaxAmount);
|
||||
dynamicObject.set("amount", amount);
|
||||
|
||||
if (BigDecimal.ZERO.compareTo(amount) != 0) {
|
||||
//this.getPageCache().put("ignoreRateChanged", "1");
|
||||
dynamicObject.set("rate", ofTaxAmount.subtract(amount).divide(amount, 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)));
|
||||
}
|
||||
|
||||
dynamicObject.set("taxamt", ofTaxAmount.subtract(amount));
|
||||
|
||||
//int entryRowCount = this.getModel().getEntryRowCount("itementry");
|
||||
if (itementry.size() <= 1) {
|
||||
if (isSettleTrans) {
|
||||
DynamicObject dynamicObject1 = itementry.addNew();
|
||||
//this.getModel().insertEntryRow("itementry", 1);
|
||||
dynamicObject1.set("seq",2);
|
||||
DynamicObject payitem = BusinessDataServiceHelper.loadSingle("ec_payitem",
|
||||
"id,direction", new QFilter[]{new QFilter("id", QCP.equals,760004250343646208L)});//
|
||||
dynamicObject1.set("payitem", payitem);
|
||||
this.fillItemEntryCbs(1,outContractSettle, itementry );
|
||||
}
|
||||
} else {
|
||||
DynamicObject transSettleItem = itementry.get(1);
|
||||
//DynamicObject transSettleItem = this.getModel().getEntryRowEntity("itementry", 1);
|
||||
DynamicObject payItem = transSettleItem.getDynamicObject("payitem");
|
||||
boolean hasSettleTrans = false;
|
||||
if(payItem!=null){
|
||||
hasSettleTrans = "YFJS".equals(payItem.getString("number"));
|
||||
}
|
||||
if (isSettleTrans && !hasSettleTrans) {
|
||||
DynamicObject dynamicObject1 = itementry.addNew();
|
||||
dynamicObject1.set("seq",2);
|
||||
//this.getModel().insertEntryRow("itementry", 1);
|
||||
DynamicObject payitem = BusinessDataServiceHelper.loadSingle("ec_payitem",
|
||||
"id,direction", new QFilter[]{new QFilter("id", QCP.equals,760004250343646208L)});//
|
||||
dynamicObject1.set("payitem", payitem);
|
||||
this.fillItemEntryCbs(1,outContractSettle, itementry);
|
||||
} else if (!isSettleTrans && hasSettleTrans) {
|
||||
transSettleItem.set("oftaxamount", transOfTaxAmount);
|
||||
transSettleItem.set("amount", transAmount);
|
||||
itementry.remove(1);
|
||||
//this.getModel().deleteEntryRow("itementry", 1);
|
||||
}
|
||||
}
|
||||
|
||||
if (isSettleTrans) {
|
||||
DynamicObject transSettleItem = itementry.get(1);
|
||||
transSettleItem.set("oftaxamount", transOfTaxAmount);
|
||||
transSettleItem.set("amount", transAmount);
|
||||
if (BigDecimal.ZERO.compareTo(transAmount) != 0) {
|
||||
transSettleItem.set("rate", transOfTaxAmount.subtract(transAmount).divide(transAmount, 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)));
|
||||
}
|
||||
|
||||
transSettleItem.set("taxamt", transOfTaxAmount.subtract(transAmount));
|
||||
}
|
||||
} else {
|
||||
DynamicObjectCollection itementry = outContractSettle.getDynamicObjectCollection("itementry");
|
||||
//int entryRowCount = this.getModel().getEntryRowCount("itementry");
|
||||
if (itementry.size() > 1) {
|
||||
DynamicObject transSettleItem = itementry.get(1);
|
||||
//DynamicObject transSettleItem = this.getModel().getEntryRowEntity("itementry", 1);
|
||||
DynamicObject payItem = transSettleItem.getDynamicObject("payitem");
|
||||
if (payItem != null && "YFJS".equals(payItem.getString("number"))) {
|
||||
itementry.remove(1);
|
||||
//this.getModel().deleteEntryRow("itementry", 1);
|
||||
}
|
||||
}
|
||||
itementry.get(0).set("oftaxamount", 0);
|
||||
//this.getModel().setValue("oftaxamount", 0, 0);
|
||||
DynamicObject taxRate =outContractSettle.getDynamicObject("taxrate");
|
||||
// DynamicObject taxRate = this.getModel().getDataEntity().getDynamicObject("taxrate");
|
||||
if (taxRate != null) {
|
||||
itementry.get(0).set("rate", taxRate.getBigDecimal("taxrate"));
|
||||
// this.getModel().setValue("rate", taxRate.getBigDecimal("taxrate"), 0);
|
||||
}
|
||||
|
||||
itementry.get(0).set("taxamt", 0);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
protected void fillItemEntryCbs(int row,DynamicObject outContractSettle,DynamicObjectCollection itementry) {
|
||||
DynamicObject cbs = this.getNeedFillCbs(outContractSettle);
|
||||
if (cbs != null && !(Boolean)outContractSettle.getBoolean("isonlist")) {
|
||||
itementry.get(row).set("itementry", cbs.getPkValue());
|
||||
//this.getModel().setValue("itemcbs", cbs.getPkValue(), row);
|
||||
}
|
||||
}
|
||||
|
||||
protected DynamicObject getNeedFillCbs(DynamicObject outContractSettle) {
|
||||
DynamicObject project = outContractSettle.getDynamicObject("project");
|
||||
DynamicObject contract = outContractSettle.getDynamicObject("contract");
|
||||
if (project != null && contract != null) {
|
||||
boolean isBudgetControl = project.getBoolean("budgetcontrol");
|
||||
String controlModel = project.getString("costcontrolmodel");
|
||||
if (isBudgetControl && controlModel.contains("1")) {
|
||||
return contract.getDynamicObject("cbs");
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void calAllTypeAmount(DynamicObject outContractSettle) {
|
||||
//DynamicObject thisSettleObj = thisModel.getDataEntity();
|
||||
DynamicObject contract = outContractSettle.getDynamicObject("contract");
|
||||
if (contract != null) {
|
||||
contract = BusinessDataServiceHelper.loadSingle(contract.getPkValue(), "ec_out_contract");
|
||||
BigDecimal calOfTaxAmt = BigDecimal.ZERO;
|
||||
BigDecimal notCalOfTaxAmt = BigDecimal.ZERO;
|
||||
BigDecimal settleOfTaxAmount = outContractSettle.getBigDecimal("settleoftaxamount");
|
||||
BigDecimal totalCalOfTaxAmt = contract.getBigDecimal("totalcaloftaxamt");
|
||||
BigDecimal totalNotCalOfTaxAmt = contract.getBigDecimal("totalnotcaloftaxamt");
|
||||
BigDecimal totalPlanPayOfTaxAmt = contract.getBigDecimal("totalapplyoftaxamount");
|
||||
BigDecimal totalRealPayOfTaxAmt = contract.getBigDecimal("totalrealoftaxamount");
|
||||
BigDecimal totalSettleOfTaxAmount = contract.getBigDecimal("totalsettleoftaxamount");
|
||||
BigDecimal calOfAmt = BigDecimal.ZERO;
|
||||
BigDecimal notCalOfAmt = BigDecimal.ZERO;
|
||||
BigDecimal settleAmount = outContractSettle.getBigDecimal("settleamount");
|
||||
BigDecimal totalCalOfAmt = contract.getBigDecimal("totalcalofamt");
|
||||
BigDecimal totalNotCalOfAmt = contract.getBigDecimal("totalnotcalofamt");
|
||||
BigDecimal totalPlanPayOfAmt = contract.getBigDecimal("totalapplyamount");
|
||||
BigDecimal totalRealPayOfAmt = contract.getBigDecimal("totalrealamount");
|
||||
BigDecimal totalSettleOfAmount = contract.getBigDecimal("totalsettleamount");
|
||||
//thisModel.updateCache();
|
||||
for(DynamicObject itemEntry : outContractSettle.getDynamicObjectCollection("itementry")) {
|
||||
//for(DynamicObject itemEntry : thisModel.getEntryEntity("itementry")) {
|
||||
DynamicObject payItem = itemEntry.getDynamicObject("payitem");
|
||||
if (payItem != null) {
|
||||
String direction = payItem.getString("direction");
|
||||
String paydirection = contract.getString("paydirection");
|
||||
if (direction != null) {
|
||||
if (StringUtils.equals("506427748873442304", String.valueOf(payItem.getPkValue()))) {
|
||||
if (direction.equals(DirectionEnum.ADD.getValue())) {
|
||||
calOfTaxAmt = paydirection.equals(PayDirectionEnum.IN.getValue()) ? calOfTaxAmt.add(itemEntry.getBigDecimal("oftaxamount")) : itemEntry.getBigDecimal("oftaxamount");
|
||||
calOfAmt = paydirection.equals(PayDirectionEnum.IN.getValue()) ? calOfAmt.add(itemEntry.getBigDecimal("amount")) : itemEntry.getBigDecimal("amount");
|
||||
} else if (direction.equals(DirectionEnum.SUB.getValue())) {
|
||||
calOfTaxAmt = paydirection.equals(PayDirectionEnum.IN.getValue()) ? calOfTaxAmt.subtract(itemEntry.getBigDecimal("oftaxamount")) : BigDecimal.ZERO.subtract(itemEntry.getBigDecimal("oftaxamount"));
|
||||
calOfAmt = paydirection.equals(PayDirectionEnum.IN.getValue()) ? calOfTaxAmt.subtract(itemEntry.getBigDecimal("amount")) : BigDecimal.ZERO.subtract(itemEntry.getBigDecimal("amount"));
|
||||
}
|
||||
} else if (direction.equals(DirectionEnum.ADD.getValue())) {
|
||||
notCalOfTaxAmt = notCalOfTaxAmt.add(itemEntry.getBigDecimal("oftaxamount"));
|
||||
notCalOfAmt = notCalOfAmt.add(itemEntry.getBigDecimal("amount"));
|
||||
} else if (direction.equals(DirectionEnum.SUB.getValue())) {
|
||||
notCalOfTaxAmt = notCalOfTaxAmt.subtract(itemEntry.getBigDecimal("oftaxamount"));
|
||||
notCalOfAmt = notCalOfAmt.subtract(itemEntry.getBigDecimal("amount"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
settleOfTaxAmount = calOfTaxAmt.add(notCalOfTaxAmt);
|
||||
settleAmount = calOfAmt.add(notCalOfAmt);
|
||||
totalCalOfTaxAmt = totalCalOfTaxAmt.add(calOfTaxAmt);
|
||||
totalCalOfAmt = totalCalOfAmt.add(calOfAmt);
|
||||
totalNotCalOfTaxAmt = totalNotCalOfTaxAmt.add(notCalOfTaxAmt);
|
||||
totalNotCalOfAmt = totalNotCalOfAmt.add(notCalOfAmt);
|
||||
totalSettleOfTaxAmount = totalSettleOfTaxAmount.add(settleOfTaxAmount);
|
||||
totalSettleOfAmount = totalSettleOfAmount.add(settleAmount);
|
||||
BigDecimal calTaxAmt = calOfTaxAmt.subtract(calOfAmt);
|
||||
BigDecimal notCalTaxAmt = notCalOfTaxAmt.subtract(notCalOfAmt);
|
||||
BigDecimal taxAmount = settleOfTaxAmount.subtract(settleAmount);
|
||||
BigDecimal totalCalTaxAmt = totalCalOfTaxAmt.subtract(totalCalOfAmt);
|
||||
BigDecimal totalNotCalTaxAmt = totalNotCalOfTaxAmt.subtract(totalNotCalOfAmt);
|
||||
BigDecimal totalSettleTaxAmount = totalSettleOfTaxAmount.subtract(totalSettleOfAmount);
|
||||
BigDecimal totalPlanPayTaxAmt = totalPlanPayOfTaxAmt.subtract(totalPlanPayOfAmt);
|
||||
BigDecimal totalRealPayTaxAmt = totalRealPayOfTaxAmt.subtract(totalRealPayOfAmt);
|
||||
outContractSettle.set("caloftaxamt", calOfTaxAmt);
|
||||
outContractSettle.set("notcaloftaxamt", notCalOfTaxAmt);
|
||||
outContractSettle.set("settleoftaxamount", settleOfTaxAmount);
|
||||
outContractSettle.set("totalcaloftaxamt", totalCalOfTaxAmt);
|
||||
outContractSettle.set("totalnotcaloftaxamt", totalNotCalOfTaxAmt);
|
||||
outContractSettle.set("totalsettleoftaxamount", totalSettleOfTaxAmount);
|
||||
outContractSettle.set("totalplanpayoftaxamt", totalPlanPayOfTaxAmt);
|
||||
outContractSettle.set("totalrealpayoftaxamt", totalRealPayOfTaxAmt);
|
||||
outContractSettle.set("calofamt", calOfAmt);
|
||||
outContractSettle.set("notcalofamt", notCalOfAmt);
|
||||
outContractSettle.set("settleamount", settleAmount);
|
||||
outContractSettle.set("totalcalofamt", totalCalOfAmt);
|
||||
outContractSettle.set("totalnotcalofamt", totalNotCalOfAmt);
|
||||
outContractSettle.set("totalsettleofamount", totalSettleOfAmount);
|
||||
outContractSettle.set("totalplanpayofamt", totalPlanPayOfAmt);
|
||||
outContractSettle.set("totalrealpayofamt", totalRealPayOfAmt);
|
||||
outContractSettle.set("caltaxamt", calTaxAmt);
|
||||
outContractSettle.set("notcaltaxamt", notCalTaxAmt);
|
||||
outContractSettle.set("taxamount", taxAmount);
|
||||
outContractSettle.set("totalcaltaxamt", totalCalTaxAmt);
|
||||
outContractSettle.set("totalnotcaltaxamt", totalNotCalTaxAmt);
|
||||
outContractSettle.set("totalsettletaxamount", totalSettleTaxAmount);
|
||||
outContractSettle.set("totalplanpaytaxamt", totalPlanPayTaxAmt);
|
||||
outContractSettle.set("totalrealpaytaxamt", totalRealPayTaxAmt);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue