1.发票延迟报销功能改造

This commit is contained in:
zhangzhiguo 2025-03-19 11:05:18 +08:00
parent 9d401a8097
commit 55975606a7
4 changed files with 65 additions and 62 deletions

View File

@ -82,7 +82,7 @@ public class TravelInvoiceOverdueRemindersOp extends AbstractOperationServicePlu
"id", "id",
filterArray); filterArray);
if(load != null && load.length > 0){ if(load == null || load.length == 0){
DynamicObjectCollection entryentity = dataEntity.getDynamicObjectCollection("invoiceentry");//发票信息 DynamicObjectCollection entryentity = dataEntity.getDynamicObjectCollection("invoiceentry");//发票信息
List<LocalDate> dateList = new ArrayList<>(); List<LocalDate> dateList = new ArrayList<>();
for (DynamicObject dynamicObject : entryentity) { for (DynamicObject dynamicObject : entryentity) {

View File

@ -26,62 +26,64 @@ public class OutContractSettlementValidator extends OutContractSettleValidator {
long referbillid = payitemdetailentry.getLong("referbillid"); long referbillid = payitemdetailentry.getLong("referbillid");
QFilter f1 = new QFilter("id", "=", referbillid); QFilter f1 = new QFilter("id", "=", referbillid);
DynamicObject outcontractmeasure = BusinessDataServiceHelper.loadSingle("ec_outcontractmeasure", new QFilter[]{f1}); DynamicObject outcontractmeasure = BusinessDataServiceHelper.loadSingle("ec_outcontractmeasure", new QFilter[]{f1});
DynamicObjectCollection listmodelentry = outcontractmeasure.getDynamicObjectCollection("listmodelentry"); if(outcontractmeasure!=null){
//判断是否有含有计量单id 若有跳过 避免多次新增 DynamicObjectCollection listmodelentry = outcontractmeasure.getDynamicObjectCollection("listmodelentry");
Set<String> set = new HashSet(); //判断是否有含有计量单id 若有跳过 避免多次新增
Set<String> set = new HashSet();
// QFilter f2 = new QFilter("id", "!=", "0"); // QFilter f2 = new QFilter("id", "!=", "0");
DynamicObjectCollection query = QueryServiceHelper.query(dataEntity1.getDynamicObjectType().getName(), "listmodelentry.zcgj_jldenrtyid", null); DynamicObjectCollection query = QueryServiceHelper.query(dataEntity1.getDynamicObjectType().getName(), "listmodelentry.zcgj_jldenrtyid", null);
// DynamicObject[] jldenrtyids = BusinessDataServiceHelper.load(listmodelentrys.getDynamicObjectType().getName(),"zcgj_jldenrtyid", new QFilter[]{f2}); // DynamicObject[] jldenrtyids = BusinessDataServiceHelper.load(listmodelentrys.getDynamicObjectType().getName(),"zcgj_jldenrtyid", new QFilter[]{f2});
for (DynamicObject object : query) { for (DynamicObject object : query) {
String id = object.getString("listmodelentry.zcgj_jldenrtyid"); String id = object.getString("listmodelentry.zcgj_jldenrtyid");
if (id != null) { if (id != null) {
set.add(id); set.add(id);
}
} }
} for (DynamicObject listmodelEntry : listmodelentry) {
for (DynamicObject listmodelEntry : listmodelentry) { String id = listmodelEntry.getString("id");
String id = listmodelEntry.getString("id"); if (set.contains(id)) {
if (set.contains(id)) { continue;
continue; }
} DynamicObject addNew = listmodelentrys.addNew();
DynamicObject addNew = listmodelentrys.addNew(); addNew.set("modelname", listmodelEntry.getString("modelname"));//清单模板名称
addNew.set("modelname", listmodelEntry.getString("modelname"));//清单模板名称 addNew.set("cmptype", listmodelEntry.getString("cmptype"));//文本
addNew.set("cmptype", listmodelEntry.getString("cmptype"));//文本 addNew.set("totalamount", listmodelEntry.getBigDecimal("totalamount"));//税额
addNew.set("totalamount", listmodelEntry.getBigDecimal("totalamount"));//税额 addNew.set("totaltax", listmodelEntry.getBigDecimal("totaltax"));//税额
addNew.set("totaltax", listmodelEntry.getBigDecimal("totaltax"));//税额 addNew.set("totaloftaxamount", listmodelEntry.getBigDecimal("totaloftaxamount"));//价税合计
addNew.set("totaloftaxamount", listmodelEntry.getBigDecimal("totaloftaxamount"));//价税合计 addNew.set("listmodelid", listmodelEntry.getLong(("listmodelid")));//清单模板id
addNew.set("listmodelid", listmodelEntry.getLong(("listmodelid")));//清单模板id addNew.set("zcgj_jldenrtyid", id);//计量单分录id
addNew.set("zcgj_jldenrtyid", id);//计量单分录id DynamicObjectCollection listEntry = addNew.getDynamicObjectCollection("listentry");//结算分录
DynamicObjectCollection listEntry = addNew.getDynamicObjectCollection("listentry");//结算分录 DynamicObjectCollection measureEntry = listmodelEntry.getDynamicObjectCollection("listentry");//计量分录
DynamicObjectCollection measureEntry = listmodelEntry.getDynamicObjectCollection("listentry");//计量分录 for (DynamicObject dynamicObject : measureEntry) {
for (DynamicObject dynamicObject : measureEntry) { DynamicObject object = listEntry.addNew();
DynamicObject object = listEntry.addNew(); object.set("listing", dynamicObject.getDynamicObject("listing"));//清单编码
object.set("listing", dynamicObject.getDynamicObject("listing"));//清单编码 object.set("listingname", dynamicObject.getString("listingname"));//清单名称
object.set("listingname", dynamicObject.getString("listingname"));//清单名称 object.set("materiel", dynamicObject.getDynamicObject("materiel"));//物料编码
object.set("materiel", dynamicObject.getDynamicObject("materiel"));//物料编码 object.set("resourceitem", dynamicObject.getDynamicObject("listing"));//资源编码
object.set("resourceitem", dynamicObject.getDynamicObject("listing"));//资源编码 object.set("resname", dynamicObject.getString("resname"));//资源名称
object.set("resname", dynamicObject.getString("resname"));//资源名称 object.set("boqnumber", dynamicObject.getDynamicObject("boqnumber"));//工程量清单编码
object.set("boqnumber", dynamicObject.getDynamicObject("boqnumber"));//工程量清单编码 object.set("contlistnumber", dynamicObject.getDynamicObject("contlistnumber"));//
object.set("contlistnumber", dynamicObject.getDynamicObject("contlistnumber"));// object.set("measureunit", dynamicObject.getDynamicObject("measureunit"));//计量单位
object.set("measureunit", dynamicObject.getDynamicObject("measureunit"));//计量单位 object.set("totalqty", dynamicObject.getBigDecimal("totalqty"));//总数量
object.set("totalqty", dynamicObject.getBigDecimal("totalqty"));//总数量 object.set("entrytaxrate", dynamicObject.getBigDecimal("entrytaxrate"));//税率%
object.set("entrytaxrate", dynamicObject.getBigDecimal("entrytaxrate"));//税率% object.set("curtaxprice", dynamicObject.getBigDecimal("curtaxprice"));//当前含税单价
object.set("curtaxprice", dynamicObject.getBigDecimal("curtaxprice"));//当前含税单价 object.set("currentprice", dynamicObject.getBigDecimal("currentprice"));//当前单价
object.set("currentprice", dynamicObject.getBigDecimal("currentprice"));//当前单价 object.set("currentamt", dynamicObject.getBigDecimal("currentamt"));//当前金额
object.set("currentamt", dynamicObject.getBigDecimal("currentamt"));//当前 object.set("currenttaxamt", dynamicObject.getBigDecimal("currenttaxamt"));//当前
object.set("currenttaxamt", dynamicObject.getBigDecimal("currenttaxamt"));//当前税额 object.set("currentoftax", dynamicObject.getBigDecimal("currentoftax"));//当前价税合计
object.set("currentoftax", dynamicObject.getBigDecimal("currentoftax"));//当前价税合计 object.set("preqty", dynamicObject.getBigDecimal("preqty"));//期初累计计量数量
object.set("preqty", dynamicObject.getBigDecimal("preqty"));//期初累计计量数量 object.set("preamout", dynamicObject.getBigDecimal("preamout"));//期初累计计量金额
object.set("preamout", dynamicObject.getBigDecimal("preamout"));//期初累计计量金额 object.set("thisqty", dynamicObject.getBigDecimal("thisqty"));//本期计量数量
object.set("thisqty", dynamicObject.getBigDecimal("thisqty"));//本期计量数量 object.set("thisamount", dynamicObject.getBigDecimal("thisamount"));//本期计量不含税金额
object.set("thisamount", dynamicObject.getBigDecimal("thisamount"));//本期计量不含 object.set("thistax", dynamicObject.getBigDecimal("thistax"));//本期税额
object.set("thistax", dynamicObject.getBigDecimal("thistax"));//本期税额 object.set("thisoftaxmount", dynamicObject.getBigDecimal("thisoftaxmount"));//本期计量含
object.set("thisoftaxmount", dynamicObject.getBigDecimal("thisoftaxmount"));//本期计量含税金额 object.set("lstqty", dynamicObject.getBigDecimal("lstqty"));//期末累计计量数量
object.set("lstqty", dynamicObject.getBigDecimal("lstqty"));//期末累计计量数量 object.set("lstamount", dynamicObject.getBigDecimal("lstamount"));//期末累计计量不含税金额
object.set("lstamount", dynamicObject.getBigDecimal("lstamount"));//期末累计计量不含税金额 object.set("listca", dynamicObject.getDynamicObject("listca"));//成本科目
object.set("listca", dynamicObject.getDynamicObject("listca"));//成本科目 object.set("listcbs", dynamicObject.getDynamicObject("listcbs"));//成本分解结构
object.set("listcbs", dynamicObject.getDynamicObject("listcbs"));//成本分解结构 object.set("listboq", dynamicObject.getDynamicObject("listboq"));//工程量清单
object.set("listboq", dynamicObject.getDynamicObject("listboq"));//工程量清单 object.set("desc", dynamicObject.getString("desc"));//说明
object.set("desc", dynamicObject.getString("desc"));//说明 }
} }
} }
} }

View File

@ -25,8 +25,8 @@ public class PaymentApplyFundExtOp extends PaymentApplyFundOp {
// 删除标品校验器 // 删除标品校验器
validators.removeIf(validator -> validator instanceof PaymentMaxAmountValidator); validators.removeIf(validator -> validator instanceof PaymentMaxAmountValidator);
validators.removeIf(validator -> validator instanceof PaymentTypeValidator); validators.removeIf(validator -> validator instanceof PaymentTypeValidator);
// 添加定制二开的校验器位置放第一位优先执行 // 添加定制二开的校验器位置放第一位优先执行 不需要产品校验自定义开发校验
validators.add(0, new PaymentMaxAmountExtValidator()); //validators.add(0, new PaymentMaxAmountExtValidator());
} }
} }

View File

@ -27,7 +27,8 @@ public class PaymentMaxAmountExtValidator extends PaymentMaxAmountValidator {
if(contractObj!=null) if(contractObj!=null)
{ {
String zcgjPricetype = contractObj.getString("zcgj_pricetype"); String zcgjPricetype = contractObj.getString("zcgj_pricetype");
if(!"bdlbdj".equals(zcgjPricetype)){ //如果支出合同计价方式为不定量不定价时则移除校验 //if(!"bdlbdj".equals(zcgjPricetype)){ //如果支出合同计价方式为不定量不定价时则移除校验
//20250318 全放开后续在增加特定逻辑校验
BigDecimal maxShouldPayAmount = this.calculateMaxShouldPayAmount(contract); BigDecimal maxShouldPayAmount = this.calculateMaxShouldPayAmount(contract);
DynamicObject contCurrency = contract.getDynamicObject("currency"); DynamicObject contCurrency = contract.getDynamicObject("currency");
if (contCurrency != null) { if (contCurrency != null) {
@ -44,10 +45,10 @@ public class PaymentMaxAmountExtValidator extends PaymentMaxAmountValidator {
} else if (maxShouldPayAmount.compareTo(curMaxShouldPayAmount) != 0) { } else if (maxShouldPayAmount.compareTo(curMaxShouldPayAmount) != 0) {
this.addErrorMessage(dataEntity, String.format(ResManager.loadKDString("合同付款信息:第%s行因暂存期间存在其他单据提交审核导致应付金额上限发生变化本单数据未刷新继续提交将超过应付金额上限。", "PaymentMaxAmountValidator_1", "ec-contract-opplugin", new Object[0]), i + 1)); this.addErrorMessage(dataEntity, String.format(ResManager.loadKDString("合同付款信息:第%s行因暂存期间存在其他单据提交审核导致应付金额上限发生变化本单数据未刷新继续提交将超过应付金额上限。", "PaymentMaxAmountValidator_1", "ec-contract-opplugin", new Object[0]), i + 1));
} else { } else {
this.addErrorMessage(dataEntity, String.format(ResManager.loadKDString("合同付款信息:第%s行本次应付金额不允许超应付金额上限请确认。", "PaymentMaxAmountValidator_2", "ec-contract-opplugin", new Object[0]), i + 1)); //this.addErrorMessage(dataEntity, String.format(ResManager.loadKDString("合同付款信息:第%s行本次应付金额不允许超应付金额上限请确认。", "PaymentMaxAmountValidator_2", "ec-contract-opplugin", new Object[0]), i + 1));
} }
} }
} //}
} }
} }
@ -58,9 +59,9 @@ public class PaymentMaxAmountExtValidator extends PaymentMaxAmountValidator {
DynamicObject contractObj = BusinessDataServiceHelper.loadSingle("ec_out_contract", "id,zcgj_pricetype", new QFilter[]{contractIdFilter}); DynamicObject contractObj = BusinessDataServiceHelper.loadSingle("ec_out_contract", "id,zcgj_pricetype", new QFilter[]{contractIdFilter});
if(contractObj!=null){ if(contractObj!=null){
String zcgjPricetype = contractObj.getString("zcgj_pricetype"); String zcgjPricetype = contractObj.getString("zcgj_pricetype");
if(!"bdlbdj".equals(zcgjPricetype)){ //如果支出合同计价方式为不定量不定价时则移除校验 //if(!"bdlbdj".equals(zcgjPricetype)){ //如果支出合同计价方式为不定量不定价时则移除校验
super.maxApplyAmountValidate( shouldPayAmountMap, deductionAmountMap, contractTypeApplyAmountMap, appliedAmountMap, appliedBillMap, dataEntity, i, entry, contract, type, key); // super.maxApplyAmountValidate( shouldPayAmountMap, deductionAmountMap, contractTypeApplyAmountMap, appliedAmountMap, appliedBillMap, dataEntity, i, entry, contract, type, key);
} //}
} }
} }