采购合同 合同金额

master
Harry Yang 2023-01-05 18:23:58 +08:00
parent 0b68691959
commit 7409ea825b
5 changed files with 49 additions and 9 deletions

View File

@ -382,11 +382,24 @@ public class ProcessController {
if (process.getProcessType() == ProcessType.sale_contract) { if (process.getProcessType() == ProcessType.sale_contract) {
contract = processService.findSaleContract(id); contract = processService.findSaleContract(id);
incomeDetails = projectBudgetService.getBudgetIncomeDetail(project); incomeDetails = projectBudgetService.getBudgetIncomeDetail(project);
detail.setContractAmount(project.getContractAmount());
} }
else if (process.getProcessType() == ProcessType.procurement_contract) { else if (process.getProcessType() == ProcessType.procurement_contract) {
contract = processService.findProcurementContract(id); contract = processService.findProcurementContract(id);
supplierMaterials = processService.getSupplierMaterials(id); supplierMaterials = processService.getSupplierMaterials(id);
procurementDetails = processService.getProcurementDetails(project.getId(), id); procurementDetails = processService.getProcurementDetails(project.getId(), id);
BigDecimal contractAmount = BigDecimal.ZERO;
for (ProcurementDetail procurementDetail : procurementDetails) {
if (!CollectionUtils.isEmpty(procurementDetail.getPurchaseDetails())) {
for (BudgetPurchaseDetail purchaseDetail : procurementDetail.getPurchaseDetails()) {
BigDecimal totalTaxInclude = purchaseDetail.getTotalTaxInclude();
if (totalTaxInclude != null) {
contractAmount = contractAmount.add(totalTaxInclude);
}
}
}
}
detail.setContractAmount(contractAmount);
} }
detail.setIsPrepaid(isPrepaid(repaidAmount)); detail.setIsPrepaid(isPrepaid(repaidAmount));

View File

@ -41,6 +41,8 @@ public class ProjectProcessDetail {
public List<SupplierMaterial> supplierMaterials; public List<SupplierMaterial> supplierMaterials;
public List<ProcurementDetail> procurementDetails; public List<ProcurementDetail> procurementDetails;
public BigDecimal contractAmount;
public void setCooperationType(CooperationType cooperationType) { public void setCooperationType(CooperationType cooperationType) {
this.cooperationType = cooperationType; this.cooperationType = cooperationType;
this.cooperationTypeDesc = Optional.ofNullable(cooperationType) this.cooperationTypeDesc = Optional.ofNullable(cooperationType)

View File

@ -82,7 +82,7 @@
<span slot="reference">{{process.contractName|ellipsis}}</span> <span slot="reference">{{process.contractName|ellipsis}}</span>
</el-popover> </el-popover>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="合同金额">{{project.contractAmount}}元</el-descriptions-item> <el-descriptions-item label="合同金额">{{contractAmount|numberFormat}}元</el-descriptions-item>
<el-descriptions-item label="客户名称" v-if="isSaleContract"> <el-descriptions-item label="客户名称" v-if="isSaleContract">
<el-popover placement="top-start" title="备客户名称注" width="400" trigger="hover" :content="contract.clientName"> <el-popover placement="top-start" title="备客户名称注" width="400" trigger="hover" :content="contract.clientName">
@ -119,7 +119,7 @@
<el-descriptions-item label="税率" v-if="process.taxRate">{{process.taxRate}}%</el-descriptions-item> <el-descriptions-item label="税率" v-if="process.taxRate">{{process.taxRate}}%</el-descriptions-item>
<el-descriptions-item label="税率" v-else></el-descriptions-item> <el-descriptions-item label="税率" v-else></el-descriptions-item>
<el-descriptions-item label="是否垫资">${isPrepaid}</el-descriptions-item> <el-descriptions-item label="是否垫资">${isPrepaid}</el-descriptions-item>
<el-descriptions-item label="垫资金额" v-if="isPrepaid==='是'">${repaidAmount}元</el-descriptions-item> <el-descriptions-item label="垫资金额" v-if="isPrepaid==='是'">{{repaidAmount|numberFormat}}元</el-descriptions-item>
<el-descriptions-item label="预算毛利率">{{budgetGrossMargin}}%</el-descriptions-item> <el-descriptions-item label="预算毛利率">{{budgetGrossMargin}}%</el-descriptions-item>
@ -403,7 +403,7 @@
.then(parseJSON) .then(parseJSON)
.then(data => { .then(data => {
const { const {
budgetGrossMargin, budgetGrossMargin, contractAmount,
attachments, processId, isPrepaid, repaidAmount, attachments, processId, isPrepaid, repaidAmount,
incomeDetails, process, projectType, cooperationType, incomeDetails, process, projectType, cooperationType,
contract, supplierMaterials, procurementDetails, project contract, supplierMaterials, procurementDetails, project
@ -448,6 +448,7 @@
this.process = process this.process = process
this.project = project this.project = project
this.isPrepaid = isPrepaid this.isPrepaid = isPrepaid
this.contractAmount = contractAmount
this.repaidAmount = repaidAmount this.repaidAmount = repaidAmount
this.contract = contract this.contract = contract
this.processId = processId this.processId = processId
@ -597,7 +598,9 @@
} }
return value return value
}, },
numberFormat(value) {
return numberFixed(value)
}
} }
}) })

View File

@ -141,7 +141,7 @@
</el-form-item> </el-form-item>
<el-form-item label="合同金额"> <el-form-item label="合同金额">
<span>{{project.contractAmount}}元</span> <span>{{contractAmount|numberFormat}}元</span>
</el-form-item> </el-form-item>
</div> </div>
@ -738,6 +738,7 @@
.then(parseJSON) .then(parseJSON)
.then(data => { .then(data => {
const { const {
contractAmount,
incomeDetails, process, supplierMaterials, project, incomeDetails, process, supplierMaterials, project,
contract, procurementDetails, attachments, ...form contract, procurementDetails, attachments, ...form
} = data } = data
@ -765,10 +766,16 @@
const applyDeptId = process?.applyDeptId?.split(',').map(id => parseInt(id)) const applyDeptId = process?.applyDeptId?.split(',').map(id => parseInt(id))
this.initForm({ ...form, ...process, ...contract, applyDeptId }) this.initForm({ ...form, ...process, ...contract, applyDeptId })
this.projectSelected = true this.projectSelected = true
this.contractAmount = contractAmount
this.processType = process.processType this.processType = process.processType
let indexCounter = 1; let indexCounter = 1;
this.incomeDetails = incomeDetails && incomeDetails.map(detail => ({ this.incomeDetails = incomeDetails && incomeDetails.map(detail => ({
...detail, type: computeType(detail.type), index: indexCounter++ // 用于记录序号,展示或者定位 ...detail, type: computeType(detail.type), index: indexCounter++,// 用于记录序号,展示或者定位
price: numberFixed(detail.price),
totalTax: numberFixed(detail.totalTax),
payAmount: numberFixed(detail.payAmount),
totalTaxExclude: numberFixed(detail.totalTaxExclude),
totalTaxInclude: numberFixed(detail.totalTaxInclude),
})) }))
this.project = project this.project = project
@ -1289,6 +1296,9 @@
return value.slice(0, limit) + '...' return value.slice(0, limit) + '...'
} }
return value return value
},
numberFormat(value) {
return numberFixed(value)
} }
} }
}) })

View File

@ -120,7 +120,7 @@
<el-table-column prop="amount" label="数量"></el-table-column> <el-table-column prop="amount" label="数量"></el-table-column>
<el-table-column prop="unit" label="单位"></el-table-column> <el-table-column prop="unit" label="单位"></el-table-column>
<el-table-column prop="price" label="预算单价" width="100"></el-table-column> <el-table-column prop="price" label="预算单价" width="130"></el-table-column>
<el-table-column prop="taxRate" label="税率(%" width="100"></el-table-column> <el-table-column prop="taxRate" label="税率(%" width="100"></el-table-column>
<el-table-column prop="totalTaxInclude_" label="含税总金额(元)" width="140"></el-table-column> <el-table-column prop="totalTaxInclude_" label="含税总金额(元)" width="140"></el-table-column>
<el-table-column prop="totalTaxExclude" label="不含税金额(元)" width="140"></el-table-column> <el-table-column prop="totalTaxExclude" label="不含税金额(元)" width="140"></el-table-column>
@ -508,7 +508,7 @@
<el-table-column prop="amount" label="数量"></el-table-column> <el-table-column prop="amount" label="数量"></el-table-column>
<el-table-column prop="unit" label="单位"></el-table-column> <el-table-column prop="unit" label="单位"></el-table-column>
<el-table-column prop="price" label="预算单价" width="100"></el-table-column> <el-table-column prop="price" label="预算单价" width="130"></el-table-column>
<el-table-column prop="taxRate" label="税率(%"></el-table-column> <el-table-column prop="taxRate" label="税率(%"></el-table-column>
<el-table-column prop="totalTaxInclude_" label="含税总金额(元)" width="120"></el-table-column> <el-table-column prop="totalTaxInclude_" label="含税总金额(元)" width="120"></el-table-column>
<el-table-column prop="totalTaxExclude" label="不含税金额(元)" width="120"></el-table-column> <el-table-column prop="totalTaxExclude" label="不含税金额(元)" width="120"></el-table-column>
@ -970,6 +970,11 @@
let indexCounter = 1; let indexCounter = 1;
this.incomeDetails = incomeDetails && incomeDetails.map(detail => ({ this.incomeDetails = incomeDetails && incomeDetails.map(detail => ({
...detail, type: computeType(detail.type), ...detail, type: computeType(detail.type),
price: numberFixed(detail.price),
totalTax: numberFixed(detail.totalTax),
payAmount: numberFixed(detail.payAmount),
totalTaxExclude: numberFixed(detail.totalTaxExclude),
totalTaxInclude: numberFixed(detail.totalTaxInclude),
expirationDate: null, // 质保期需要全部重新填写 expirationDate: null, // 质保期需要全部重新填写
index: indexCounter++ // 用于记录序号,展示或者定位 index: indexCounter++ // 用于记录序号,展示或者定位
})) }))
@ -977,7 +982,11 @@
let rowKey = 0 let rowKey = 0
this.procurementDetails = procurementDetails && procurementDetails.map(detail => ({ this.procurementDetails = procurementDetails && procurementDetails.map(detail => ({
...detail, feeType: computeFeeType(detail.type), ...detail, feeType: computeFeeType(detail.type),
totalTaxInclude_: detail.totalTaxInclude, totalTaxInclude: undefined, // 存在相同字段转换一下 price: numberFixed(detail.price),
payAmount: numberFixed(detail.payAmount),
totalTaxExclude: numberFixed(detail.totalTaxExclude),
totalTaxInclude_: numberFixed(detail.totalTaxInclude),
totalTaxInclude: undefined, // 存在相同字段转换一下
rowKey: rowKey++, children: [] rowKey: rowKey++, children: []
})) }))
@ -1467,6 +1476,9 @@
return value.slice(0, limit) + '...' return value.slice(0, limit) + '...'
} }
return value return value
},
numberFormat(value) {
return numberFixed(value)
} }
} }
}) })