Browse Source

[feat] 销售管理

修改销售估价的总经理添加前端页面,提交方法新增不含税总经营成本不能为空的判断条件
去掉不含税采购成本和含税采购成本乘以用量的计算规则
按照销售估价总经理添加前端页面,重写详情页面
修改 总经理添加销售估价后端方法,按照以下计算规则计算
1、不含税料号估价成本=该料号的BOM物料不含税总采购成本+不含税运输成本+不含税服务成本+不含税开发成本+(该料号的BOM物料不含税总采购成本/不含税总物料成本)*上一年度的总经营不含税成本合计
1.1、该料号的BOM物料不含税总采购成本=手填的bom物料的总的不含税采购单价的合计
2、含税料号估价成本=该料号的BOM物料含税总采购成本+含税运输成本+含税服务成本+含税开发成本+(该料号的BOM物料含税总采购成本/含税总物料成本)*上一年度的总经营含税成本合计
2.1、该料号的BOM物料含税总采购成本=手填的bom物料的总的含税采购单价的合计
3、不含税运输成本:手填(业务填写)
含税运输成本=(1+0.13)*不含税运输成本
4、不含税服务成本:手填(业务填写)
含税服务成本=(1+0.13)*不含税服务成本
5、不含税开发成本:手填(工程填写)
含税开发成本=(1+0.13)*不含税开发成本
6.1、该料号的不含税经营成本(RMB)=(该料号的BOM物料不含税总采购成本/上一年度总物料不含税成本合计)*上一年度的总经营不含税成本合计
6.1.1、上一年度的总经营不含税成本合计:手填(总经理填)
6.1.2、上一年度总物料不含税成本合计:手填(总经理填)
7.1、该料号含税经营成本(RMB)=(该料号的BOM物料含税总采购成本/上一年度总物料含税成本合计)*上一年度的总经营含税成本合计
7.1.1、上一年度的总经营含税成本合计:(1+0.13)*上一年度的总经营不含税成本合计
7.1.2、上一年度总物料含税成本合计:(1+0.13)*上一年度总物料不含税成本合计
8、被估价物料的不含税单价(RMB)=被估价物料的不含税总成本/(1-利润率)
9、被估价物料的含税单价(RMB)=被估价物料的含税总成本/(1-利润率)
10、不含税总价(RMB)=被估价物料的不含税单价(RMB)*数量
11、含税总价(RMB)=被估价物料的含税单价(RMB)*数量
12、不含税单价(美元)=被估价物料的不含税单价(RMB)/美元汇率
注:换算后,保留小数点后两位,超过后的四舍五入
13、含税单价(美元)=不含税单价(美元)
14、不含税总价(美元)=不含税单价(美元)*数量
15、含税总价(美元)=含税单价(美元)*数量
dev
liuxiaoxu 3 months ago
parent
commit
1b63514992
  1. 132
      ruoyi-admin/src/main/java/com/ruoyi/sales/service/impl/SalesEstimateServiceImpl.java
  2. 30
      ruoyi-admin/src/main/resources/templates/sales/estimate/ceoAdd.html
  3. 156
      ruoyi-admin/src/main/resources/templates/sales/estimate/ceoAddDetail.html

132
ruoyi-admin/src/main/java/com/ruoyi/sales/service/impl/SalesEstimateServiceImpl.java

@ -300,28 +300,48 @@ public class SalesEstimateServiceImpl implements ISalesEstimateService
/* 下面的计算规则 /* 下面的计算规则
1不含税总经营成本=不含税人工成本+不含税推广成本+不含税业务成本+不含税管理成本 1不含税料号估价成本=该料号的BOM物料不含税总采购成本+不含税运输成本+不含税服务成本+不含税开发成本+(该料号的BOM物料不含税总采购成本/不含税总物料成本)*上一年度的总经营不含税成本合计
2含税总经营成本=不含税总经营成本*(1+0.13)
3不含税经营成本(RMB)=(该料号的BOM物料总不含税采购成本/总不含税物料成本)*总不含税经营成本
4含税经营成本(RMB)=(该料号的BOM物料总含税采购成本/总含税物料成本)*总含税经营成本
5不含税料号估价成本:该料号的BOM物料总不含税采购成本+不含税总经营成本+(该料号的BOM物料总不含税采购成本/总不含税物料成本)*总不含税经营成本
新版不含税料号估价成本:该料号的BOM物料总不含税采购成本+不含税运输成本+不含税服务成本+不含税开发成本+(该料号的BOM物料总不含税采购成本/总物料不含税成本)*总经营不含税成
1.1该料号的BOM物料不含税总采购成本=手填的bom物料的总的不含税采购单价的合计
6含税料号估价成本:该料号的BOM物料总含税采购成本+含税总经营成本+(该料号的BOM物料总含税采购成本/总含税物料成本)*总含税经营成本 2含税料号估价成本=该料号的BOM物料含税总采购成本+含税运输成本+含税服务成本+含税开发成本+(该料号的BOM物料含税总采购成本/含税总物料成本)*上一年度的总经营含税成本合计
新版含税料号估价成本:该料号的BOM物料总含税采购成本+含税运输成本+含税服务成本+含税开发成本+(该料号的BOM物料总含税采购成本/总物料含税成本)*总经营含税成本
2.1该料号的BOM物料含税总采购成本=手填的bom物料的总的含税采购单价的合计
7不含税单价(RMB):该料号不含税估价成本/(1-利润率) 3不含税运输成本手填业务填写
8含税单价(RMB)=该料号含税估价成本/(1-利润率) 含税运输成本=1+0.13*不含税运输成本
9不含税总价(RMB)=不含税单价(RMB)*数量
10含税总价(RMB)=含税单价(RMB)*数量 4不含税服务成本手填业务填写
11不含税单价(美元)=不税单价(RMB)/美元汇率 含税服务成本=1+0.13*不含税服务成本
5不含税开发成本手填工程填写
含税开发成本=1+0.13*不含税开发成本
6.1该料号的不含税经营成本(RMB)=(该料号的BOM物料不含税总采购成本/上一年度总物料不含税成本合计)*上一年度的总经营不含税成本合计
6.1.1上一年度的总经营不含税成本合计手填总经理填
6.1.2上一年度总物料不含税成本合计手填总经理填
7.1该料号含税经营成本(RMB)=(该料号的BOM物料含税总采购成本/上一年度总物料含税成本合计)*上一年度的总经营含税成本合计
7.1.1上一年度的总经营含税成本合计1+0.13*上一年度的总经营不含税成本合计
7.1.2上一年度总物料含税成本合计1+0.13*上一年度总物料不含税成本合计
8被估价物料的不含税单价RMB=被估价物料的不含税总成本/1-利润率
9被估价物料的含税单价(RMB)=被估价物料的含税总成本/1-利润率
10不含税总价(RMB)=被估价物料的不含税单价(RMB)*数量
11含税总价(RMB)=被估价物料的含税单价(RMB)*数量
12不含税单价(美元)=被估价物料的不含税单价(RMB)/美元汇率
注:换算后保留小数点后两位超过后的四舍五入 注:换算后保留小数点后两位超过后的四舍五入
12含税单价(美元)=不含税单价(美元)
13不含税总价(美元)=不含税单价(美元)*数量 13含税单价(美元)=不含税单价(美元)
14含税总价(美元)=含税单价(美元)*数量
15总含税物料成本 = 总不含税物料成本*(1+0.13) 14不含税总价(美元)=不含税单价(美元)*数量
15含税总价(美元)=含税单价(美元)*数量
* */ * */
@ -360,25 +380,32 @@ public class SalesEstimateServiceImpl implements ISalesEstimateService
List<SalesEstimateDetail> salesEstimateDetailList = salesEstimate.getSalesEstimateDetailList(); // 获取销售估价详情列表 List<SalesEstimateDetail> salesEstimateDetailList = salesEstimate.getSalesEstimateDetailList(); // 获取销售估价详情列表
for (SalesEstimateDetail salesEstimateDetail : salesEstimateDetailList) { // 遍历销售估价详情列表 for (SalesEstimateDetail salesEstimateDetail : salesEstimateDetailList) { // 遍历销售估价详情列表
BigDecimal noTaxLaborCosts = salesEstimateDetail.getNoTaxLaborCosts(); // 获取不含税的人工成本 // BigDecimal noTaxLaborCosts = salesEstimateDetail.getNoTaxLaborCosts(); // 获取不含税的人工成本
BigDecimal noTaxPromotionalCosts = salesEstimateDetail.getNoTaxPromotionalCosts(); // 获取不含税的推广成本 // BigDecimal noTaxPromotionalCosts = salesEstimateDetail.getNoTaxPromotionalCosts(); // 获取不含税的推广成本
BigDecimal noTaxBusinessCosts = salesEstimateDetail.getNoTaxBusinessCosts(); // 获取不含税的业务成本 // BigDecimal noTaxBusinessCosts = salesEstimateDetail.getNoTaxBusinessCosts(); // 获取不含税的业务成本
BigDecimal noTaxManagesCosts = salesEstimateDetail.getNoTaxManagesCosts(); // 获取不含税的管理成本 // BigDecimal noTaxManagesCosts = salesEstimateDetail.getNoTaxManagesCosts(); // 获取不含税的管理成本
BigDecimal noTaxMaterialCosts = salesEstimateDetail.getNoTaxMaterialCosts(); // 获取不含税的物料成本
BigDecimal totalOperatingCosts = salesEstimateDetail.getTotalOperatingCosts(); //上一年度不含税总经营成本
BigDecimal noTaxMaterialCosts = salesEstimateDetail.getNoTaxMaterialCosts(); // 获取上一年度不含税的总物料成本
BigDecimal noTaxShippingCosts = salesEstimateDetail.getNoTaxShippingCosts(); //不含税运输成本 BigDecimal noTaxShippingCosts = salesEstimateDetail.getNoTaxShippingCosts(); //不含税运输成本
BigDecimal noTaxServiceCosts = salesEstimateDetail.getNoTaxServiceCosts(); //不含税服务成本 BigDecimal noTaxServiceCosts = salesEstimateDetail.getNoTaxServiceCosts(); //不含税服务成本
BigDecimal noTaxDevelopmentCosts = salesEstimateDetail.getNoTaxDevelopCosts();//不含税开发成本 BigDecimal noTaxDevelopmentCosts = salesEstimateDetail.getNoTaxDevelopCosts();//不含税开发成本
BigDecimal taxShippingCosts = salesEstimateDetail.getNoTaxShippingCosts().multiply(BigDecimal.valueOf(1.13)) ; //含税运输成本
BigDecimal taxServiceCosts = salesEstimateDetail.getNoTaxServiceCosts().multiply(BigDecimal.valueOf(1.13)); //含税服务成本
BigDecimal taxDevelopmentCosts = salesEstimateDetail.getNoTaxDevelopCosts().multiply(BigDecimal.valueOf(1.13));//含税开发成本
BigDecimal profitRate = salesEstimateDetail.getProfitRate().divide(BigDecimal.valueOf(100)); // 获取利润率并转换为小数形式 BigDecimal profitRate = salesEstimateDetail.getProfitRate().divide(BigDecimal.valueOf(100)); // 获取利润率并转换为小数形式
Long materialNum = salesEstimateDetail.getMaterialNum(); // 获取物料数量 Long materialNum = salesEstimateDetail.getMaterialNum(); // 获取物料数量
// 计算不含税总经营成本 // // 计算不含税总经营成本
BigDecimal noAllTaxOperatingCosts = calculateNoTaxOperatingCosts( // BigDecimal noAllTaxOperatingCosts = calculateNoTaxOperatingCosts(
noTaxLaborCosts, noTaxPromotionalCosts, noTaxBusinessCosts, noTaxManagesCosts); // noTaxLaborCosts, noTaxPromotionalCosts, noTaxBusinessCosts, noTaxManagesCosts);
// 计算含税总经营成本 // 计算上一年度含税总经营成本
BigDecimal allTaxOperatingCosts = calculateTaxOperatingCosts(noAllTaxOperatingCosts); BigDecimal allTaxOperatingCosts = calculateTaxOperatingCosts(totalOperatingCosts);
// 计算总含税物料成本 // 计算总含税物料成本
BigDecimal taxMaterialCosts = calculateTaxMaterialCosts(noTaxMaterialCosts); BigDecimal taxMaterialCosts = calculateTaxMaterialCosts(noTaxMaterialCosts);
@ -389,18 +416,18 @@ public class SalesEstimateServiceImpl implements ISalesEstimateService
// 计算物料总含税采购成本 // 计算物料总含税采购成本
BigDecimal totalTaxPurchaseRmb = calculateTotalTaxPurchaseRmb(estimateDetailMaterialList); BigDecimal totalTaxPurchaseRmb = calculateTotalTaxPurchaseRmb(estimateDetailMaterialList);
// 计算不含税经营成本(RMB),并保留两位小数 // 计算该料号的不含税经营成本(RMB),并保留两位小数
BigDecimal noTaxOperatingCost = calculateNoTaxOperatingCost(totalNoTaxPurchaseRmb, noTaxMaterialCosts, noAllTaxOperatingCosts) BigDecimal noTaxOperatingCost = calculateNoTaxOperatingCost(totalNoTaxPurchaseRmb, noTaxMaterialCosts, totalOperatingCosts)
.setScale(2, RoundingMode.HALF_UP); .setScale(2, RoundingMode.HALF_UP);
// 计算含税经营成本(RMB),并保留两位小数 // 计算该料号含税经营成本(RMB),并保留两位小数
BigDecimal taxOperatingCost = calculateTaxOperatingCost(totalTaxPurchaseRmb, taxMaterialCosts, allTaxOperatingCosts) BigDecimal taxOperatingCost = calculateTaxOperatingCost(totalTaxPurchaseRmb, taxMaterialCosts, allTaxOperatingCosts)
.setScale(2, RoundingMode.HALF_UP); .setScale(2, RoundingMode.HALF_UP);
// 计算不含税料号估价成本,并保留两位小数 // 计算该料号的不含税料号估价成本,并保留两位小数
BigDecimal noTaxEstimateCost = calculateNoTaxEstimateCost(totalNoTaxPurchaseRmb, noTaxShippingCosts,noTaxServiceCosts,noTaxDevelopmentCosts,noAllTaxOperatingCosts, noTaxMaterialCosts) BigDecimal noTaxEstimateCost = calculateNoTaxEstimateCost(totalNoTaxPurchaseRmb, noTaxShippingCosts,noTaxServiceCosts,noTaxDevelopmentCosts,noTaxOperatingCost)
.setScale(2, RoundingMode.HALF_UP); .setScale(2, RoundingMode.HALF_UP);
// 计算含税料号估价成本,并保留两位小数 // 计算该料号的含税料号估价成本,并保留两位小数
BigDecimal taxEstimateCost = calculateTaxEstimateCost(totalTaxPurchaseRmb,noTaxShippingCosts,noTaxServiceCosts,noTaxDevelopmentCosts, allTaxOperatingCosts, taxMaterialCosts) BigDecimal taxEstimateCost = calculateTaxEstimateCost(totalTaxPurchaseRmb,taxShippingCosts,taxServiceCosts,taxDevelopmentCosts, allTaxOperatingCosts)
.setScale(2, RoundingMode.HALF_UP); .setScale(2, RoundingMode.HALF_UP);
// 计算不含税单价(RMB),并保留两位小数 // 计算不含税单价(RMB),并保留两位小数
@ -434,8 +461,11 @@ public class SalesEstimateServiceImpl implements ISalesEstimateService
noTaxDollarMain = noTaxDollarMain.add(noTaxUnitPriceDollar); noTaxDollarMain = noTaxDollarMain.add(noTaxUnitPriceDollar);
// 计算含税单价(美元),并保留两位小数 // 计算含税单价(美元),并保留两位小数
BigDecimal taxUnitPriceDollar = calculateTaxUnitPriceDollar(taxUnitPriceRmb, usdRate) // BigDecimal taxUnitPriceDollar = calculateTaxUnitPriceDollar(taxUnitPriceRmb, usdRate)
.setScale(2, RoundingMode.HALF_UP); // .setScale(2, RoundingMode.HALF_UP);
BigDecimal taxUnitPriceDollar = noTaxUnitPriceDollar;
// 计算主表的含税单价美元 // 计算主表的含税单价美元
taxDollarMain = taxDollarMain.add(taxUnitPriceDollar); taxDollarMain = taxDollarMain.add(taxUnitPriceDollar);
@ -499,8 +529,8 @@ public class SalesEstimateServiceImpl implements ISalesEstimateService
BigDecimal totalNoTaxPurchaseRmb = BigDecimal.ZERO; BigDecimal totalNoTaxPurchaseRmb = BigDecimal.ZERO;
for (SalesEstimateDetailMaterial detailMaterial : estimateDetailMaterialList) { for (SalesEstimateDetailMaterial detailMaterial : estimateDetailMaterialList) {
BigDecimal noTaxPurchaseRmb = detailMaterial.getNoTaxPurchaseRmb(); // 获取不含税采购单价 BigDecimal noTaxPurchaseRmb = detailMaterial.getNoTaxPurchaseRmb(); // 获取不含税采购单价
Long useNum = detailMaterial.getUseNum(); // 获取用量 //Long useNum = detailMaterial.getUseNum(); // 获取用量
totalNoTaxPurchaseRmb = totalNoTaxPurchaseRmb.add(noTaxPurchaseRmb.multiply(new BigDecimal(useNum))); // 计算总不含税采购成本 totalNoTaxPurchaseRmb = totalNoTaxPurchaseRmb.add(noTaxPurchaseRmb); // 计算总不含税采购成本
} }
return totalNoTaxPurchaseRmb; return totalNoTaxPurchaseRmb;
} }
@ -510,16 +540,16 @@ public class SalesEstimateServiceImpl implements ISalesEstimateService
BigDecimal totalTaxPurchaseRmb = BigDecimal.ZERO; BigDecimal totalTaxPurchaseRmb = BigDecimal.ZERO;
for (SalesEstimateDetailMaterial detailMaterial : estimateDetailMaterialList) { for (SalesEstimateDetailMaterial detailMaterial : estimateDetailMaterialList) {
BigDecimal taxPurchaseRmb = detailMaterial.getTaxPurchaseRmb(); // 获取含税采购单价 BigDecimal taxPurchaseRmb = detailMaterial.getTaxPurchaseRmb(); // 获取含税采购单价
Long useNum = detailMaterial.getUseNum(); // 获取用量 // Long useNum = detailMaterial.getUseNum(); // 获取用量
totalTaxPurchaseRmb = totalTaxPurchaseRmb.add(taxPurchaseRmb.multiply(new BigDecimal(useNum))); // 计算总含税采购成本 totalTaxPurchaseRmb = totalTaxPurchaseRmb.add(taxPurchaseRmb); // 计算总含税采购成本
} }
return totalTaxPurchaseRmb; return totalTaxPurchaseRmb;
} }
// 计算不含税经营成本(RMB) // 计算该料号的不含税经营成本(RMB)
private BigDecimal calculateNoTaxOperatingCost(BigDecimal totalNoTaxPurchaseRmb, BigDecimal noTaxMaterialCosts, BigDecimal noAllTaxOperatingCosts) { private BigDecimal calculateNoTaxOperatingCost(BigDecimal totalNoTaxPurchaseRmb, BigDecimal noTaxMaterialCosts, BigDecimal totalOperatingCosts) {
return totalNoTaxPurchaseRmb.divide(noTaxMaterialCosts, 2, RoundingMode.HALF_UP) return totalNoTaxPurchaseRmb.divide(noTaxMaterialCosts, 2, RoundingMode.HALF_UP)
.multiply(noAllTaxOperatingCosts); .multiply(totalOperatingCosts);
} }
// 计算含税经营成本(RMB) // 计算含税经营成本(RMB)
@ -531,23 +561,21 @@ public class SalesEstimateServiceImpl implements ISalesEstimateService
// 计算不含税料号估价成本 BigDecimal noTaxShippingCosts = salesEstimateDetail.getNoTaxShippingCosts(); //不含税运输成本 // 计算不含税料号估价成本 BigDecimal noTaxShippingCosts = salesEstimateDetail.getNoTaxShippingCosts(); //不含税运输成本
// BigDecimal noTaxServiceCosts = salesEstimateDetail.getNoTaxServiceCosts(); //不含税服务成本 // BigDecimal noTaxServiceCosts = salesEstimateDetail.getNoTaxServiceCosts(); //不含税服务成本
// BigDecimal noTaxDevelopmentCosts = salesEstimateDetail.getNoTaxDevelopCosts();//不含税开发成本 // BigDecimal noTaxDevelopmentCosts = salesEstimateDetail.getNoTaxDevelopCosts();//不含税开发成本
private BigDecimal calculateNoTaxEstimateCost(BigDecimal totalNoTaxPurchaseRmb, BigDecimal noTaxShippingCosts ,BigDecimal noTaxServiceCosts,BigDecimal noTaxDevelopmentCosts ,BigDecimal noAllTaxOperatingCosts,BigDecimal noTaxMaterialCosts) { private BigDecimal calculateNoTaxEstimateCost(BigDecimal totalNoTaxPurchaseRmb, BigDecimal noTaxShippingCosts ,BigDecimal noTaxServiceCosts,BigDecimal noTaxDevelopmentCosts ,BigDecimal noTaxOperatingCost) {
return totalNoTaxPurchaseRmb return totalNoTaxPurchaseRmb
.add(noTaxShippingCosts) .add(noTaxShippingCosts)
.add(noTaxServiceCosts) .add(noTaxServiceCosts)
.add(noTaxDevelopmentCosts) .add(noTaxDevelopmentCosts)
.add(totalNoTaxPurchaseRmb.divide(noTaxMaterialCosts, 2, RoundingMode.HALF_UP) .add(noTaxOperatingCost);
.multiply(noAllTaxOperatingCosts));
} }
// 计算含税料号估价成本 // 计算含税料号估价成本
private BigDecimal calculateTaxEstimateCost(BigDecimal totalTaxPurchaseRmb, BigDecimal noTaxShippingCosts ,BigDecimal noTaxServiceCosts,BigDecimal noTaxDevelopmentCosts ,BigDecimal allTaxOperatingCosts, BigDecimal taxMaterialCosts) { private BigDecimal calculateTaxEstimateCost(BigDecimal totalTaxPurchaseRmb, BigDecimal taxShippingCosts ,BigDecimal taxServiceCosts,BigDecimal taxDevelopmentCosts ,BigDecimal allTaxOperatingCosts) {
return totalTaxPurchaseRmb return totalTaxPurchaseRmb
.add(noTaxShippingCosts) .add(taxShippingCosts)
.add(noTaxServiceCosts) .add(taxServiceCosts)
.add(noTaxDevelopmentCosts) .add(taxDevelopmentCosts)
.add(totalTaxPurchaseRmb.divide(taxMaterialCosts, 2, RoundingMode.HALF_UP) .add(allTaxOperatingCosts);
.multiply(allTaxOperatingCosts));
} }
// 计算不含税单价(RMB) // 计算不含税单价(RMB)

30
ruoyi-admin/src/main/resources/templates/sales/estimate/ceoAdd.html

@ -132,6 +132,7 @@
"noTaxDevelopCosts": null, // 初始化为 null 或 0 "noTaxDevelopCosts": null, // 初始化为 null 或 0
"noTaxShippingCosts": null, "noTaxShippingCosts": null,
"noTaxServiceCosts": null, "noTaxServiceCosts": null,
"totalOperatingCosts": null,
"noTaxMaterialCosts": null, "noTaxMaterialCosts": null,
"noTaxOperatingCosts": null, "noTaxOperatingCosts": null,
"taxOperatingCosts": null, "taxOperatingCosts": null,
@ -145,6 +146,7 @@
var noTaxDevelopCosts = $('#noTaxDevelopCosts' + index).val(); var noTaxDevelopCosts = $('#noTaxDevelopCosts' + index).val();
var noTaxShippingCosts = $('#noTaxShippingCosts' + index).val(); var noTaxShippingCosts = $('#noTaxShippingCosts' + index).val();
var noTaxServiceCosts = $('#noTaxServiceCosts' + index).val(); var noTaxServiceCosts = $('#noTaxServiceCosts' + index).val();
var totalOperatingCosts = $('#totalOperatingCosts' + index).val();
var noTaxMaterialCosts = $('#noTaxMaterialCosts' + index).val(); var noTaxMaterialCosts = $('#noTaxMaterialCosts' + index).val();
var noTaxOperatingCosts = $('#noTaxOperatingCosts' + index).val(); var noTaxOperatingCosts = $('#noTaxOperatingCosts' + index).val();
var taxOperatingCosts = $('#taxOperatingCosts' + index).val(); var taxOperatingCosts = $('#taxOperatingCosts' + index).val();
@ -166,18 +168,23 @@
hasError = true; hasError = true;
return; // 退出循环,阻止进一步处理 return; // 退出循环,阻止进一步处理
} }
if (!totalOperatingCosts && totalOperatingCosts !== '0') {
$.modal.alertWarning("不含税总经营成本不能为空,请填写第 " + (parseInt(index) + 1) + " 行的不含税总经营成本");
hasError = true;
return; // 退出循环,阻止进一步处理
}
if (!noTaxMaterialCosts && noTaxMaterialCosts !== '0') { if (!noTaxMaterialCosts && noTaxMaterialCosts !== '0') {
$.modal.alertWarning("物料成本不能为空,请填写第 " + (parseInt(index) + 1) + " 行的物料成本"); $.modal.alertWarning("不含税物料成本不能为空,请填写第 " + (parseInt(index) + 1) + " 行的不含税物料成本");
hasError = true; hasError = true;
return; // 退出循环,阻止进一步处理 return; // 退出循环,阻止进一步处理
} }
if (!noTaxOperatingCosts && noTaxOperatingCosts !== '0') { if (!noTaxOperatingCosts && noTaxOperatingCosts !== '0') {
$.modal.alertWarning("经营成本不能为空,请填写第 " + (parseInt(index) + 1) + " 行的经营成本"); $.modal.alertWarning("不含税经营成本不能为空,请填写第 " + (parseInt(index) + 1) + " 行的不含税经营成本");
hasError = true; hasError = true;
return; // 退出循环,阻止进一步处理 return; // 退出循环,阻止进一步处理
} }
if (!taxOperatingCosts && taxOperatingCosts !== '0') { if (!taxOperatingCosts && taxOperatingCosts !== '0') {
$.modal.alertWarning("税经营成本不能为空,请填写第 " + (parseInt(index) + 1) + " 行的税经营成本"); $.modal.alertWarning("税经营成本不能为空,请填写第 " + (parseInt(index) + 1) + " 行的税经营成本");
hasError = true; hasError = true;
return; // 退出循环,阻止进一步处理 return; // 退出循环,阻止进一步处理
} }
@ -191,6 +198,7 @@
estimateMaterialDataList[index].noTaxDevelopCosts = noTaxDevelopCosts; estimateMaterialDataList[index].noTaxDevelopCosts = noTaxDevelopCosts;
estimateMaterialDataList[index].noTaxShippingCosts = noTaxShippingCosts; estimateMaterialDataList[index].noTaxShippingCosts = noTaxShippingCosts;
estimateMaterialDataList[index].noTaxServiceCosts = noTaxServiceCosts; estimateMaterialDataList[index].noTaxServiceCosts = noTaxServiceCosts;
estimateMaterialDataList[index].totalOperatingCosts = totalOperatingCosts;
estimateMaterialDataList[index].noTaxMaterialCosts = noTaxMaterialCosts; estimateMaterialDataList[index].noTaxMaterialCosts = noTaxMaterialCosts;
estimateMaterialDataList[index].noTaxOperatingCosts = noTaxOperatingCosts; estimateMaterialDataList[index].noTaxOperatingCosts = noTaxOperatingCosts;
estimateMaterialDataList[index].taxOperatingCosts = taxOperatingCosts; estimateMaterialDataList[index].taxOperatingCosts = taxOperatingCosts;
@ -510,6 +518,8 @@
const taxOperatingCosts = ( const taxOperatingCosts = (
(taxPurchaseRmb/allTaxMaterialCosts) * allTaxOperatingCosts (taxPurchaseRmb/allTaxMaterialCosts) * allTaxOperatingCosts
).toFixed(2) || ''; ).toFixed(2) || '';
// 根据 `parentRow.profitRate` 设置利润率 // 根据 `parentRow.profitRate` 设置利润率
let profitRateKey = 'aprofitRate'; let profitRateKey = 'aprofitRate';
switch (parentRow.profitRate) { switch (parentRow.profitRate) {
@ -651,8 +661,11 @@
// 遍历数据集计算不含税采购成本和含税采购成本 // 遍历数据集计算不含税采购成本和含税采购成本
data.forEach(function(item) { data.forEach(function(item) {
item.rows.forEach(function(row) { item.rows.forEach(function(row) {
var noTaxPurchaseRmb = row.noTaxPurchaseRmb * row.useNum; // var noTaxPurchaseRmb = row.noTaxPurchaseRmb * row.useNum;
var taxPurchaseRmb = row.taxPurchaseRmb * row.useNum; // var taxPurchaseRmb = row.taxPurchaseRmb * row.useNum;
var noTaxPurchaseRmb = row.noTaxPurchaseRmb;
var taxPurchaseRmb = row.taxPurchaseRmb;
allNoTaxPurchaseRmb += noTaxPurchaseRmb; allNoTaxPurchaseRmb += noTaxPurchaseRmb;
allTaxPurchaseRmb += taxPurchaseRmb; allTaxPurchaseRmb += taxPurchaseRmb;
@ -681,8 +694,11 @@
// 遍历数据集计算不含税采购成本和含税采购成本 // 遍历数据集计算不含税采购成本和含税采购成本
data.forEach(function(item) { data.forEach(function(item) {
item.rows.forEach(function(row) { item.rows.forEach(function(row) {
var noTaxPurchaseRmb = row.noTaxPurchaseRmb * row.useNum; // var noTaxPurchaseRmb = row.noTaxPurchaseRmb * row.useNum;
var taxPurchaseRmb = row.taxPurchaseRmb * row.useNum; // var taxPurchaseRmb = row.taxPurchaseRmb * row.useNum;
var noTaxPurchaseRmb = row.noTaxPurchaseRmb;
var taxPurchaseRmb = row.taxPurchaseRmb;
allNoTaxPurchaseRmb += noTaxPurchaseRmb; allNoTaxPurchaseRmb += noTaxPurchaseRmb;
allTaxPurchaseRmb += taxPurchaseRmb; allTaxPurchaseRmb += taxPurchaseRmb;

156
ruoyi-admin/src/main/resources/templates/sales/estimate/ceoAddDetail.html

@ -354,33 +354,33 @@
// 从 `salesEstimateDetailVo` 中获取其他成本信息 // 从 `salesEstimateDetailVo` 中获取其他成本信息
const { const {
noTaxLaborCosts = '', totalOperatingCosts = '', //上一年度的总经营不含税成本合计
noTaxPromotionalCosts = '', noTaxMaterialCosts = '' // 上一年度总物料不含税成本合计
noTaxBusinessCosts = '',
noTaxManagesCosts = '',
noTaxMaterialCosts = ''
} = salesEstimateDetailVo || {}; } = salesEstimateDetailVo || {};
// 计算不含税总经营成本 // 计算上一年度含税总经营成本,假设增值税率为 13%
const noAllTaxOperatingCosts = ( const allTaxOperatingCosts = (
parseFloat(noTaxLaborCosts) + parseFloat(totalOperatingCosts) * 1.13
parseFloat(noTaxBusinessCosts) +
parseFloat(noTaxManagesCosts) +
parseFloat(noTaxPromotionalCosts)
).toFixed(2) || ''; ).toFixed(2) || '';
// 计算含税总经营成本,假设增值税率为 13% //上一年度总物料含税成本合计
const allTaxOperatingCosts = ( const allTaxMaterialCosts = (
parseFloat(noAllTaxOperatingCosts) * 1.13 parseFloat(noTaxMaterialCosts) * 1.13
).toFixed(2) || ''; ).toFixed(2) || '';
//该料号的不含税经营成本
//该料号的不含税经营成本 (RMB)=(该料号的BOM物料不含税总采购成本/上一年度总物料不含税成本合计)*上一年度的总经营不含税成本合计
const noTaxOperatingCosts = ( const noTaxOperatingCosts = (
(noTaxPurchaseRmb/noTaxMaterialCosts) * noAllTaxOperatingCosts (noTaxPurchaseRmb/noTaxMaterialCosts) * totalOperatingCosts
).toFixed(2) || ''; ).toFixed(2) || '';
// 该料号的含税经营成本
// 该料号的含税经营成本 (RMB)=(该料号的BOM物料含税总采购成本/上一年度总物料含税成本合计)*上一年度的总经营含税成本合计
const taxOperatingCosts = ( const taxOperatingCosts = (
(taxPurchaseRmb/noTaxMaterialCosts) * allTaxOperatingCosts (taxPurchaseRmb/allTaxMaterialCosts) * allTaxOperatingCosts
).toFixed(2) || ''; ).toFixed(2) || '';
// 根据 `parentRow.profitRate` 设置利润率 // 根据 `parentRow.profitRate` 设置利润率
let profitRateKey = 'aprofitRate'; let profitRateKey = 'aprofitRate';
switch (parentRow.profitRate) { switch (parentRow.profitRate) {
@ -409,10 +409,7 @@
noTaxDevelopCosts, noTaxDevelopCosts,
noTaxShippingCosts, noTaxShippingCosts,
noTaxServiceCosts, noTaxServiceCosts,
noTaxLaborCosts, totalOperatingCosts,
noTaxPromotionalCosts,
noTaxBusinessCosts,
noTaxManagesCosts,
noTaxMaterialCosts, noTaxMaterialCosts,
noTaxOperatingCosts, noTaxOperatingCosts,
taxOperatingCosts, taxOperatingCosts,
@ -427,10 +424,7 @@
noTaxDevelopCosts: '', noTaxDevelopCosts: '',
noTaxShippingCosts: '', noTaxShippingCosts: '',
noTaxServiceCosts: '', noTaxServiceCosts: '',
noTaxLaborCosts: '', totalOperatingCosts: '',
noTaxPromotionalCosts: '',
noTaxBusinessCosts: '',
noTaxManagesCosts: '',
noTaxMaterialCosts: '', noTaxMaterialCosts: '',
noTaxOperatingCosts: '', noTaxOperatingCosts: '',
taxOperatingCosts: '', taxOperatingCosts: '',
@ -453,24 +447,12 @@
formHtml += '<label for="noTaxServiceCosts' + index + '">不含税服务成本(RMB):</label>'; formHtml += '<label for="noTaxServiceCosts' + index + '">不含税服务成本(RMB):</label>';
formHtml += '<input type="text" class="form-control" id="noTaxServiceCosts' + index + '" name="noTaxServiceCosts' + index + '" value="' + costs.noTaxServiceCosts + '" readonly>'; formHtml += '<input type="text" class="form-control" id="noTaxServiceCosts' + index + '" name="noTaxServiceCosts' + index + '" value="' + costs.noTaxServiceCosts + '" readonly>';
formHtml += '</div>'; formHtml += '</div>';
formHtml += '<h3>总经营成本</h3>'; formHtml += '<h3>上一年度总经营成本</h3>';
formHtml += '<div class="form-group">'; formHtml += '<div class="form-group">';
formHtml += '<label for="noTaxLaborCosts' + index + '">不含税人工成本(RMB):</label>'; formHtml += '<label for="totalOperatingCosts' + index + '">不含税总经营成本(RMB):</label>';
formHtml += '<input type="text" class="form-control" id="noTaxLaborCosts' + index + '" name="noTaxLaborCosts' + index + '" value="' + costs.noTaxLaborCosts + '" readonly>'; formHtml += '<input type="text" class="form-control" id="totalOperatingCosts' + index + '" name="totalOperatingCosts' + index + '" value="' + costs.totalOperatingCosts + '" readonly>';
formHtml += '</div>'; formHtml += '</div>';
formHtml += '<div class="form-group">'; formHtml += '<h3>上一年度总物料成本</h3>';
formHtml += '<label for="noTaxPromotionalCosts' + index + '">不含税推广成本(RMB):</label>';
formHtml += '<input type="text" class="form-control" id="noTaxPromotionalCosts' + index + '" name="noTaxPromotionalCosts' + index + '" value="' + costs.noTaxPromotionalCosts + '" readonly>';
formHtml += '</div>';
formHtml += '<div class="form-group">';
formHtml += '<label for="noTaxBusinessCosts' + index + '">不含税业务成本(RMB):</label>';
formHtml += '<input type="text" class="form-control" id="noTaxBusinessCosts' + index + '" name="noTaxBusinessCosts' + index + '" value="' + costs.noTaxBusinessCosts + '" readonly>';
formHtml += '</div>';
formHtml += '<div class="form-group">';
formHtml += '<label for="noTaxManagesCosts' + index + '">不含税管理成本(RMB):</label>';
formHtml += '<input type="text" class="form-control" id="noTaxManagesCosts' + index + '" name="noTaxManagesCosts' + index + '" value="' + costs.noTaxManagesCosts + '" readonly>';
formHtml += '</div>';
formHtml += '<h3>总物料成本</h3>';
formHtml += '<div class="form-group">'; formHtml += '<div class="form-group">';
formHtml += '<label for="noTaxMaterialCosts' + index + '">不含税总物料成本(RMB):</label>'; formHtml += '<label for="noTaxMaterialCosts' + index + '">不含税总物料成本(RMB):</label>';
formHtml += '<input type="text" class="form-control" id="noTaxMaterialCosts' + index + '" name="noTaxMaterialCosts' + index + '" value="' + costs.noTaxMaterialCosts + '" readonly>'; formHtml += '<input type="text" class="form-control" id="noTaxMaterialCosts' + index + '" name="noTaxMaterialCosts' + index + '" value="' + costs.noTaxMaterialCosts + '" readonly>';
@ -506,17 +488,8 @@
// 根据 input 的 id 或 name 进行相应的计算 // 根据 input 的 id 或 name 进行相应的计算
switch (inputId) { switch (inputId) {
case 'noTaxLaborCosts' + index: case 'totalOperatingCosts' + index:
calculateOperatingCosts(inputValue, 'noTaxLaborCosts'); calculateOperatingCosts(inputValue, 'totalOperatingCosts');
break;
case 'noTaxPromotionalCosts' + index:
calculateOperatingCosts(inputValue, 'noTaxPromotionalCosts');
break;
case 'noTaxBusinessCosts' + index:
calculateOperatingCosts(inputValue, 'noTaxBusinessCosts');
break;
case 'noTaxManagesCosts' + index:
calculateOperatingCosts(inputValue, 'noTaxManagesCosts');
break; break;
case 'noTaxMaterialCosts' + index: case 'noTaxMaterialCosts' + index:
updateMaterialCosts(inputValue); updateMaterialCosts(inputValue);
@ -529,41 +502,47 @@
}); });
function calculateOperatingCosts(value, costType) { function calculateOperatingCosts(value, costType) {
var noAllTaxOperatingCosts = 0; // var totalOperatingCosts = 0;
var allNoTaxPurchaseRmb = 0; var allNoTaxPurchaseRmb = 0;
var allTaxPurchaseRmb = 0; var allTaxPurchaseRmb = 0;
// 获取所有相关的不含税成本 // // 获取所有相关的不含税成本
['noTaxLaborCosts', 'noTaxPromotionalCosts', 'noTaxBusinessCosts', 'noTaxManagesCosts'].forEach(function(cost) { // ['noTaxLaborCosts', 'noTaxPromotionalCosts', 'noTaxBusinessCosts', 'noTaxManagesCosts'].forEach(function(cost) {
var currentCost = parseFloat($form.find('#' + cost + index).val()); // var currentCost = parseFloat($form.find('#' + cost + index).val());
noAllTaxOperatingCosts += currentCost; // noAllTaxOperatingCosts += currentCost;
}); // });
// 更新不含税总经营成本 // 更新上一年度不含税总经营成本
$form.find('#noAllTaxOperatingCosts' + index).val(noAllTaxOperatingCosts.toFixed(2)); var totalOperatingCosts = parseFloat($form.find('#totalOperatingCosts' + index).val());
// 计算含税总经营成本 // 计算上一年度含税总经营成本
var allTaxOperatingCosts = noAllTaxOperatingCosts * 1.13; var allTaxOperatingCosts = totalOperatingCosts * 1.13;
$form.find('#allTaxOperatingCosts' + index).val(allTaxOperatingCosts.toFixed(2)); $form.find('#allTaxOperatingCosts' + index).val(allTaxOperatingCosts.toFixed(2));
// 遍历数据集计算不含税采购成本和含税采购成本 // 遍历数据集计算不含税采购成本和含税采购成本
data.forEach(function(item) { data.forEach(function(item) {
item.rows.forEach(function(row) { item.rows.forEach(function(row) {
var noTaxPurchaseRmb = row.noTaxPurchaseRmb * row.useNum; // var noTaxPurchaseRmb = row.noTaxPurchaseRmb * row.useNum;
var taxPurchaseRmb = row.taxPurchaseRmb * row.useNum; // var taxPurchaseRmb = row.taxPurchaseRmb * row.useNum;
var noTaxPurchaseRmb = row.noTaxPurchaseRmb;
var taxPurchaseRmb = row.taxPurchaseRmb;
allNoTaxPurchaseRmb += noTaxPurchaseRmb; allNoTaxPurchaseRmb += noTaxPurchaseRmb;
allTaxPurchaseRmb += taxPurchaseRmb; allTaxPurchaseRmb += taxPurchaseRmb;
}); });
}); });
// 该料号的不含税经营成本
var noTaxMaterialCosts = parseFloat($form.find('#noTaxMaterialCosts' + index).val()); var noTaxMaterialCosts = parseFloat($form.find('#noTaxMaterialCosts' + index).val());//不含税总物料成本
var noTaxOperatingCosts = (allNoTaxPurchaseRmb / noTaxMaterialCosts) * noAllTaxOperatingCosts; var allTaxMaterialCosts = noTaxMaterialCosts * 1.13;//含税总物料成本
// 该料号的不含税经营成本(RMB)=(该料号的BOM物料不含税总采购成本/上一年度总物料不含税成本合计)*上一年度的总经营不含税成本合计
var noTaxOperatingCosts = (allNoTaxPurchaseRmb / noTaxMaterialCosts) * totalOperatingCosts;
$form.find('#noTaxOperatingCosts' + index).val(noTaxOperatingCosts.toFixed(2)); $form.find('#noTaxOperatingCosts' + index).val(noTaxOperatingCosts.toFixed(2));
// 该料号的含税经营成本 // 该料号含税经营成本(RMB)=(该料号BOM物料含税总采购成本/上一年度总物料含税成本合计)*上一年度的总经营含税成本合计
var taxOperatingCosts = (allTaxPurchaseRmb / noTaxMaterialCosts) * allTaxOperatingCosts; var taxOperatingCosts = (allTaxPurchaseRmb / allTaxMaterialCosts) * allTaxOperatingCosts;
$form.find('#taxOperatingCosts' + index).val(taxOperatingCosts.toFixed(2)); $form.find('#taxOperatingCosts' + index).val(taxOperatingCosts.toFixed(2));
} }
@ -576,23 +555,46 @@
// 遍历数据集计算不含税采购成本和含税采购成本 // 遍历数据集计算不含税采购成本和含税采购成本
data.forEach(function(item) { data.forEach(function(item) {
item.rows.forEach(function(row) { item.rows.forEach(function(row) {
var noTaxPurchaseRmb = row.noTaxPurchaseRmb * row.useNum; // var noTaxPurchaseRmb = row.noTaxPurchaseRmb * row.useNum;
var taxPurchaseRmb = row.taxPurchaseRmb * row.useNum; // var taxPurchaseRmb = row.taxPurchaseRmb * row.useNum;
var noTaxPurchaseRmb = row.noTaxPurchaseRmb;
var taxPurchaseRmb = row.taxPurchaseRmb;
allNoTaxPurchaseRmb += noTaxPurchaseRmb; allNoTaxPurchaseRmb += noTaxPurchaseRmb;
allTaxPurchaseRmb += taxPurchaseRmb; allTaxPurchaseRmb += taxPurchaseRmb;
}); });
}); });
// 更新不含税经营成本 // // 更新不含税经营成本
var noAllTaxOperatingCosts = parseFloat($form.find('#noAllTaxOperatingCosts' + index).val()); // var noAllTaxOperatingCosts = parseFloat($form.find('#noAllTaxOperatingCosts' + index).val());
var noTaxOperatingCosts = (noTaxPurchaseRmb / value) * noAllTaxOperatingCosts; // var noTaxOperatingCosts = (noTaxPurchaseRmb / value) * noAllTaxOperatingCosts;
// $form.find('#noTaxOperatingCosts' + index).val(noTaxOperatingCosts.toFixed(2));
//
// // 更新含税经营成本
// var taxOperatingCosts = (taxPurchaseRmb / value) * noAllTaxOperatingCosts;
// $form.find('#taxOperatingCosts' + index).val(taxOperatingCosts.toFixed(2));
// 更新上一年度不含税总经营成本
var totalOperatingCosts = parseFloat($form.find('#totalOperatingCosts' + index).val());
// 计算上一年度含税总经营成本
var allTaxOperatingCosts = totalOperatingCosts * 1.13;
$form.find('#allTaxOperatingCosts' + index).val(allTaxOperatingCosts.toFixed(2));
// 该料号的不含税经营成本(RMB)=(该料号的BOM物料不含税总采购成本/上一年度总物料不含税成本合计)*上一年度的总经营不含税成本合计
var noTaxMaterialCosts = parseFloat($form.find('#noTaxMaterialCosts' + index).val());
var allTaxMaterialCosts = noTaxMaterialCosts * 1.13;
var noTaxOperatingCosts = (allNoTaxPurchaseRmb / noTaxMaterialCosts) * totalOperatingCosts;
$form.find('#noTaxOperatingCosts' + index).val(noTaxOperatingCosts.toFixed(2)); $form.find('#noTaxOperatingCosts' + index).val(noTaxOperatingCosts.toFixed(2));
// 更新含税经营成本 // 该料号含税经营成本(RMB)=(该料号的BOM物料含税总采购成本/上一年度总物料含税成本合计)*上一年度的总经营含税成本合计
var taxOperatingCosts = (taxPurchaseRmb / value) * noAllTaxOperatingCosts; var taxOperatingCosts = (allTaxPurchaseRmb / allTaxMaterialCosts) * allTaxOperatingCosts;
$form.find('#taxOperatingCosts' + index).val(taxOperatingCosts.toFixed(2)); $form.find('#taxOperatingCosts' + index).val(taxOperatingCosts.toFixed(2));
} }
} }
}); });

Loading…
Cancel
Save