From 19d5ef28d2fc7ffc26563999abdc360e94b36ba7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E8=B4=B5=E5=BC=BA?= Date: Thu, 3 Jul 2025 17:43:04 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=A0BIP=E9=80=BB=E8=BE=91=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../formplugin/SumInvoiceEntryPlugin.java | 31 ++++++ .../recon/opplugin/YongyouBIPOperation.java | 103 ++++++++++-------- 2 files changed, 88 insertions(+), 46 deletions(-) diff --git a/main/java/shkd/repc/recon/formplugin/SumInvoiceEntryPlugin.java b/main/java/shkd/repc/recon/formplugin/SumInvoiceEntryPlugin.java index 8b6c478..f5a9413 100644 --- a/main/java/shkd/repc/recon/formplugin/SumInvoiceEntryPlugin.java +++ b/main/java/shkd/repc/recon/formplugin/SumInvoiceEntryPlugin.java @@ -4,10 +4,15 @@ import kd.bos.bill.AbstractBillPlugIn; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.form.events.AfterDoOperationEventArgs; +import kd.bos.form.events.ClientCallBackEvent; import kd.bos.form.events.ClosedCallBackEvent; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.operation.SaveServiceHelper; +import kd.macc.sca.algox.task.ServiceHelper; import kd.sdk.plugin.Plugin; import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.EventObject; /** @@ -31,6 +36,8 @@ public class SumInvoiceEntryPlugin extends AbstractBillPlugIn implements Plugin BigDecimal notaxamt = inventry_invoicebill.getBigDecimal("notaxamt"); BigDecimal tax = inventry_invoicebill.getBigDecimal("tax"); BigDecimal amount = inventry_invoicebill.getBigDecimal("amount"); + //新增字段赋值 + addFieldsRule(dynamicObject,inventry_invoicebill); dynamicObject.set("qeug_notaxamt",notaxamt); dynamicObject.set("qeug_tax",tax); dynamicObject.set("qeug_amount",amount); @@ -39,6 +46,30 @@ public class SumInvoiceEntryPlugin extends AbstractBillPlugIn implements Plugin } } + private void addFieldsRule(DynamicObject dynamicObject,DynamicObject invoiceBill) { + //本次核销不含税金额 + BigDecimal notTaxAmount; + //本次核销金额的税额 + BigDecimal taxAmount; + Object pkValue = invoiceBill.getPkValue(); + BigDecimal hasWriteOffAmt = dynamicObject.getBigDecimal("inventry_haswriteoffamt"); + DynamicObject reconInvoiceBill = BusinessDataServiceHelper.loadSingle(pkValue, "recon_invoicebill"); + if (reconInvoiceBill != null) { + DynamicObjectCollection invoiceDetails = reconInvoiceBill.getDynamicObjectCollection("invoiceentry"); + if (invoiceDetails!=null && invoiceDetails.size()!=0){ + DynamicObject entry_taxrate = invoiceDetails.get(0).getDynamicObject("entry_taxrate"); + BigDecimal taxrate = entry_taxrate.getBigDecimal("taxrate"); + //本次核销不含税金额=含税金额(本次核销金额)÷ (1 + 税率) + notTaxAmount=hasWriteOffAmt.divide(taxrate.add(BigDecimal.ONE),2, RoundingMode.HALF_UP); + //本次核销金额的税额=含税金额(本次核销金额) - 本次核销不含税金额 + taxAmount = hasWriteOffAmt.subtract(notTaxAmount).setScale(2, RoundingMode.HALF_UP); + dynamicObject.set("qeug_amountfield",notTaxAmount); + dynamicObject.set("qeug_inventry_haswriteoff",taxAmount); + } + } + } + + @Override public void afterDoOperation(AfterDoOperationEventArgs args) { super.afterDoOperation(args); diff --git a/main/java/shkd/repc/recon/opplugin/YongyouBIPOperation.java b/main/java/shkd/repc/recon/opplugin/YongyouBIPOperation.java index 1f21de0..3d5d8e1 100644 --- a/main/java/shkd/repc/recon/opplugin/YongyouBIPOperation.java +++ b/main/java/shkd/repc/recon/opplugin/YongyouBIPOperation.java @@ -652,61 +652,66 @@ public class YongyouBIPOperation extends AbstractOperationServicePlugIn implemen items.put("notax_de",payRequestInfo.getBigDecimal("notaxamt").toString());//贷方无税金额,除税金额 items.put("local_notax_de",payRequestInfo.getBigDecimal("notaxamt").toString());//组织本币无税金额 } else { - // 税额 + // 税额=本次核销税额累加(只针对专票); BigDecimal taxAmount = BigDecimal.ZERO; - //无税金额(专普混合:专票无税+普票价税合计) + //不含税金额(专普混合:专票本次核销不含税金额累加+普票用本次核销金额进行累加) BigDecimal notTaxAmount = BigDecimal.ZERO; // 税率相关变量 BigDecimal commonTaxRate = null; Long commonTaxRateId = null; boolean hasDifferentTaxRates = false; + //本次核销不含税金额=含税金额(本次核销金额)÷ (1 + 税率) + BigDecimal entryNotTaxAmount; + //本次核销金额的税额=含税金额(本次核销金额) - 本次核销不含税金额 + //BigDecimal entryTaxAmount = BigDecimal.ZERO; // 遍历发票 for (DynamicObject invoiceObj : invoiceEntry) { DynamicObject invoiceBillF7 = invoiceObj.getDynamicObject("inventry_invoicebill"); - if (invoiceBillF7!=null){ + if (invoiceBillF7!=null) { Object pkValue = invoiceBillF7.getPkValue(); DynamicObject invoiceBill = BusinessDataServiceHelper.loadSingle(pkValue, "recon_invoicebill"); if (invoiceBill != null) { - //表头不含税 - BigDecimal notTax=invoiceBill.getBigDecimal("notaxamt"); - //表头价税合计 - BigDecimal amount=invoiceBill.getBigDecimal("amount"); + //本次核销金额 + BigDecimal hasWriteOffAmt = invoiceObj.getBigDecimal("inventry_haswriteoffamt"); + // 判断【发票登记-发票类型-名称】 DynamicObject invoice = invoiceBill.getDynamicObject("invoice"); if (invoice != null) { String invoiceName = invoice.getString("name"); if (invoiceName != null && invoiceName.contains("专用")) { - notTaxAmount=notTaxAmount.add(notTax); - // 发票登记-发票明细 + + taxAmount = taxAmount.add(hasWriteOffAmt); + + + // 发票登记-发票明细————————只有一行 DynamicObjectCollection invoiceDetails = invoiceBill.getDynamicObjectCollection("invoiceentry"); if (invoiceDetails != null && invoiceDetails.size() != 0) { - for (DynamicObject invoiceDetail : invoiceDetails) { - BigDecimal entryTax = invoiceDetail.getBigDecimal("entry_tax"); - // 税额累加 - taxAmount = taxAmount.add(entryTax); + // 处理税率 + DynamicObject entryTaxRate = invoiceDetails.get(0).getDynamicObject("entry_taxrate"); + if (entryTaxRate != null) { + Long currentTaxRateId = (Long) entryTaxRate.getPkValue(); + BigDecimal currentTaxRate = entryTaxRate.getBigDecimal("taxrate"); + //本次核销不含税金额=含税金额(本次核销金额)÷ (1 + 税率) + entryNotTaxAmount=hasWriteOffAmt.divide(currentTaxRate.add(BigDecimal.ONE),2, RoundingMode.HALF_UP); + // 专票不含税=本次核销不含税金额累加 + // 本次核销不含税金额累加 + notTaxAmount=notTaxAmount.add(entryNotTaxAmount); - // 处理税率 - DynamicObject entryTaxRate = invoiceDetail.getDynamicObject("entry_taxrate"); - if (entryTaxRate != null) { - Long currentTaxRateId = (Long) entryTaxRate.getPkValue(); - BigDecimal currentTaxRate = entryTaxRate.getBigDecimal("taxrate"); - - // 第一次遇到税率,记录下来 - if (commonTaxRateId == null) { - commonTaxRateId = currentTaxRateId; - commonTaxRate = currentTaxRate; - } - // 后续遇到不同的税率,标记为不一致 - else if (!commonTaxRateId.equals(currentTaxRateId)) { - hasDifferentTaxRates = true; - } + // 第一次遇到税率,记录下来 + if (commonTaxRateId == null) { + commonTaxRateId = currentTaxRateId; + commonTaxRate = currentTaxRate; + } + // 后续遇到不同的税率,标记为不一致 + else if (!commonTaxRateId.equals(currentTaxRateId)) { + hasDifferentTaxRates = true; } } - } - }else { - notTaxAmount=notTaxAmount.add(amount); + } + }else{ + notTaxAmount=notTaxAmount.add(hasWriteOffAmt); } } } @@ -773,14 +778,18 @@ public class YongyouBIPOperation extends AbstractOperationServicePlugIn implemen } } else { - // 税额 + // 税额=本次核销税额累加(只针对专票); BigDecimal taxAmount = BigDecimal.ZERO; - //无税金额(专普混合:专票无税+普票价税合计) + //不含税金额(专普混合:专票本次核销不含税金额累加+普票用本次核销金额进行累加) BigDecimal notTaxAmount = BigDecimal.ZERO; // 税率相关变量 BigDecimal commonTaxRate = null; Long commonTaxRateId = null; boolean hasDifferentTaxRates = false; + //本次核销不含税金额=含税金额(本次核销金额)÷ (1 + 税率) + BigDecimal entryNotTaxAmount; + //本次核销金额的税额=含税金额(本次核销金额) - 本次核销不含税金额 + //BigDecimal entryTaxAmount = BigDecimal.ZERO; // 遍历发票 for (DynamicObject invoiceObj : invoiceEntry) { @@ -789,29 +798,31 @@ public class YongyouBIPOperation extends AbstractOperationServicePlugIn implemen Object pkValue = invoiceBillF7.getPkValue(); DynamicObject invoiceBill = BusinessDataServiceHelper.loadSingle(pkValue, "recon_invoicebill"); if (invoiceBill != null) { - //表头不含税 - BigDecimal notTax=invoiceBill.getBigDecimal("notaxamt"); - //表头价税合计 - BigDecimal amount=invoiceBill.getBigDecimal("amount"); + //本次核销金额 + BigDecimal hasWriteOffAmt = invoiceObj.getBigDecimal("inventry_haswriteoffamt"); // 判断【发票登记-发票类型-名称】 DynamicObject invoice = invoiceBill.getDynamicObject("invoice"); if (invoice != null) { String invoiceName = invoice.getString("name"); if (invoiceName != null && invoiceName.contains("专用")) { - notTaxAmount=notTaxAmount.add(notTax); - // 发票登记-发票明细 + + taxAmount = taxAmount.add(hasWriteOffAmt); + + + // 发票登记-发票明细————————只有一行 DynamicObjectCollection invoiceDetails = invoiceBill.getDynamicObjectCollection("invoiceentry"); if (invoiceDetails != null && invoiceDetails.size() != 0) { - for (DynamicObject invoiceDetail : invoiceDetails) { - BigDecimal entryTax = invoiceDetail.getBigDecimal("entry_tax"); - // 税额累加 - taxAmount = taxAmount.add(entryTax); // 处理税率 - DynamicObject entryTaxRate = invoiceDetail.getDynamicObject("entry_taxrate"); + DynamicObject entryTaxRate = invoiceDetails.get(0).getDynamicObject("entry_taxrate"); if (entryTaxRate != null) { Long currentTaxRateId = (Long) entryTaxRate.getPkValue(); BigDecimal currentTaxRate = entryTaxRate.getBigDecimal("taxrate"); + //本次核销不含税金额=含税金额(本次核销金额)÷ (1 + 税率) + entryNotTaxAmount=hasWriteOffAmt.divide(currentTaxRate.add(BigDecimal.ONE),2, RoundingMode.HALF_UP); + // 专票不含税=本次核销不含税金额累加 + // 本次核销不含税金额累加 + notTaxAmount=notTaxAmount.add(entryNotTaxAmount); // 第一次遇到税率,记录下来 if (commonTaxRateId == null) { @@ -823,10 +834,10 @@ public class YongyouBIPOperation extends AbstractOperationServicePlugIn implemen hasDifferentTaxRates = true; } } - } + } }else{ - notTaxAmount=notTaxAmount.add(amount); + notTaxAmount=notTaxAmount.add(hasWriteOffAmt); } } }