Compare commits

..

No commits in common. "b21c54a9016e8fe9816288db1ebf3f65d6b25f1a" and "8ea80a4dbebf34e1a54f09e5cbbe25ec5c96cf86" have entirely different histories.

44 changed files with 432 additions and 851 deletions

View File

@ -5,7 +5,6 @@ export function listPayable(query) {
return request({ return request({
url: '/finance/payable/list', url: '/finance/payable/list',
method: 'post', method: 'post',
headers: { 'Content-Type': 'multipart/form-data' },
data: query data: query
}) })
} }
@ -40,8 +39,7 @@ export function mergeAndInitiatePayment(data) {
return request({ return request({
url: '/finance/payable/mergeAndInitiatePayment', url: '/finance/payable/mergeAndInitiatePayment',
method: 'post', method: 'post',
data: data, data: data
needLoading: true
}) })
} }
@ -50,8 +48,7 @@ export function mergeAndInitiateReceipt(data) {
return request({ return request({
url: '/finance/payable/mergeAndInitiateReceipt', url: '/finance/payable/mergeAndInitiateReceipt',
method: 'post', method: 'post',
data: data, data: data
needLoading: true
}) })
} }

View File

@ -116,9 +116,6 @@ export function listPayableBills(query) {
return request({ return request({
url: 'finance/payable/list', url: 'finance/payable/list',
method: 'post', method: 'post',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
data: query data: query
}) })
} }

View File

@ -5,11 +5,11 @@ import {tansParams} from "@/utils/ruoyi"
export function listReceipt(query) { export function listReceipt(query) {
return request({ return request({
url: '/finance/ticket/list', url: '/finance/ticket/list',
method: 'post', method: 'get',
headers: { // headers: {
'Content-Type': 'application/x-www-form-urlencoded' // 'Content-Type': 'application/x-www-form-urlencoded'
}, // },
data: query data: tansParams(query)
}) })
} }
@ -67,11 +67,3 @@ export function addReceipt(data) {
needLoading: true needLoading: true
}) })
} }
// 撤销收票单
export function revokeReceipt(id) {
return request({
url: '/finance/ticket/revoke/' + id,
method: 'put'
})
}

View File

@ -1,5 +1,5 @@
<template> <template>
<el-drawer title="采购-应付单详情" :visible.sync="internalVisible" :wrapper-closable="false" size="70%" @close="handleClose"> <el-drawer title="修改采购应付单" :visible.sync="internalVisible" size="70%" @close="handleClose">
<div class="dialog-body"> <div class="dialog-body">
<!-- Part 1: Details --> <!-- Part 1: Details -->
<div> <div>
@ -13,7 +13,7 @@
<div class="detail-item"><strong>项目名称:</strong> {{ formData.projectName }}</div> <div class="detail-item"><strong>项目名称:</strong> {{ formData.projectName }}</div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="detail-item"><strong>采购-应付单编号:</strong> {{ formData.payableBillCode }}</div> <div class="detail-item"><strong>应付单编号:</strong> {{ formData.payableBillCode }}</div>
</el-col> </el-col>
</el-row> </el-row>
@ -25,7 +25,7 @@
<div class="detail-item"><strong>该制造商是否有预付单:</strong> {{ formData.preResidueAmount == 0 ? '否' : '是' }}</div> <div class="detail-item"><strong>该制造商是否有预付单:</strong> {{ formData.preResidueAmount == 0 ? '否' : '是' }}</div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="detail-item"><strong>预付金额():</strong> {{ formData.preResidueAmount }}</div> <div class="detail-item"><strong>预付金额:</strong> {{ formData.preResidueAmount }}</div>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
@ -36,40 +36,40 @@
<div class="detail-item"><strong>合同编号:</strong> {{ formData.orderCode }}</div> <div class="detail-item"><strong>合同编号:</strong> {{ formData.orderCode }}</div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="detail-item"><strong>/入库单号:</strong> {{ formData.inventoryCode }}</div> <div class="detail-item"><strong>入库单号:</strong> {{ formData.inventoryCode }}</div>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="8"> <el-col :span="8">
<div class="detail-item"><strong>含税总价():</strong> {{ formData.totalPriceWithTax }}</div> <div class="detail-item"><strong>含税总价:</strong> {{ formData.totalPriceWithTax }}</div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="detail-item"><strong>未税总价():</strong> {{ formData.totalPriceWithoutTax }}</div> <div class="detail-item"><strong>未税总价:</strong> {{ formData.totalPriceWithoutTax }}</div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="detail-item"><strong>税额():</strong> {{ formData.taxAmount }}</div> <div class="detail-item"><strong>税额:</strong> {{ formData.taxAmount }}</div>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="8"> <el-col :span="8">
<div class="detail-item"><strong>未付款金额():</strong> {{ formData.unpaidPaymentAmount }}</div> <div class="detail-item"><strong>未付款金额:</strong> {{ formData.unpaidPaymentAmount }}</div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="detail-item"><strong>已付款金额():</strong> {{ formData.paidPaymentAmount }}</div> <div class="detail-item"><strong>已付款金额:</strong> {{ formData.paidPaymentAmount }}</div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="detail-item"><strong>付款中金额():</strong> {{ this.$calc.sub(this.$calc.sub(formData.totalPriceWithTax,formData.paidPaymentAmount),formData.unpaidPaymentAmount) }}</div> <div class="detail-item"><strong>付款中金额:</strong> {{ this.$calc.sub(this.$calc.sub(formData.totalPriceWithTax,formData.paidPaymentAmount),formData.unpaidPaymentAmount) }}</div>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="8"> <el-col :span="8">
<div class="detail-item"><strong>未收票金额():</strong> {{ formData.unreceivedTicketAmount }}</div> <div class="detail-item"><strong>未收票金额:</strong> {{ formData.unreceivedTicketAmount }}</div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="detail-item"><strong>已收票金额():</strong> {{ formData.receivedTicketAmount }}</div> <div class="detail-item"><strong>已收票金额:</strong> {{ formData.receivedTicketAmount }}</div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="detail-item"><strong>收票中金额():</strong> {{ this.$calc.sub(this.$calc.sub(formData.totalPriceWithTax,formData.receivedTicketAmount),formData.unreceivedTicketAmount)}}</div> <div class="detail-item"><strong>收票中金额:</strong> {{ this.$calc.sub(this.$calc.sub(formData.totalPriceWithTax,formData.receivedTicketAmount),formData.unreceivedTicketAmount)}}</div>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
@ -92,7 +92,7 @@
<div style="padding: 20px"> <div style="padding: 20px">
<el-tabs v-model="activeTab"> <el-tabs v-model="activeTab">
<el-tab-pane label="明细" name="details"> <el-tab-pane label="明细" name="details">
<el-divider content-position="left">采购-付款单</el-divider> <el-divider content-position="left">采购付款单</el-divider>
<el-table :data="formData.detailList" style="width: 100%" show-summary :summary-method="getSummaries"> <el-table :data="formData.detailList" style="width: 100%" show-summary :summary-method="getSummaries">
<el-table-column type="index" label="序号" width="50"></el-table-column> <el-table-column type="index" label="序号" width="50"></el-table-column>
<el-table-column prop="payableDetailType" label="付款通道"> <el-table-column prop="payableDetailType" label="付款通道">
@ -105,18 +105,14 @@
{{ scope.row.actualPaymentTime || '-' }} {{ scope.row.actualPaymentTime || '-' }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="paymentAmount" label="本次付款金额"> <el-table-column prop="paymentAmount" label="本次付款金额"></el-table-column>
<template slot-scope="scope">
<span :style="scope.row.paymentAmount<0?{color:'red'}:{}"> {{ scope.row.paymentAmount }}</span>
</template>
</el-table-column>
<el-table-column prop="paymentRate" label="本次付款比例"></el-table-column> <el-table-column prop="paymentRate" label="本次付款比例"></el-table-column>
<el-table-column prop="paymentStatus" label="付款状态"> <el-table-column prop="paymentStatus" label="付款状态">
<template slot-scope="scope"> <template slot-scope="scope">
<dict-tag :options="dict.type.payment_status" :value="scope.row.paymentStatus"/> <dict-tag :options="dict.type.payment_status" :value="scope.row.paymentStatus"/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="paymentBillCode" label="采购-付款单编号"></el-table-column> <el-table-column prop="paymentBillCode" label="采购付款单编号"></el-table-column>
<el-table-column label="回执单/退款图"> <el-table-column label="回执单/退款图">
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="scope.row.finAttachment"> <span v-if="scope.row.finAttachment">
@ -127,7 +123,7 @@
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-divider content-position="left">采购-收票单</el-divider> <el-divider content-position="left">采购收票单</el-divider>
<el-table :data="formData.ticketDetailList" style="width: 100%" show-summary :summary-method="getSummaries"> <el-table :data="formData.ticketDetailList" style="width: 100%" show-summary :summary-method="getSummaries">
<el-table-column type="index" label="序号" width="50"></el-table-column> <el-table-column type="index" label="序号" width="50"></el-table-column>
<el-table-column prop="payableDetailType" label="发票类型"> <el-table-column prop="payableDetailType" label="发票类型">
@ -135,25 +131,20 @@
<dict-tag :options="dict.type.ticket_detail_type" :value="scope.row.payableDetailType"/> <dict-tag :options="dict.type.ticket_detail_type" :value="scope.row.payableDetailType"/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="actualTicketTime" label="实际收票时间"> <el-table-column prop="vendorTicketTime" label="制造商开票时间">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.actualTicketTime || '-' }} {{ scope.row.vendorTicketTime || '-' }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="paymentAmount" label="本次收票金额"> <el-table-column prop="paymentAmount" label="本次收票金额"></el-table-column>
<template slot-scope="scope">
<span :style="scope.row.paymentAmount<0?{color:'red'}:{}"> {{ scope.row.paymentAmount }}</span>
</template>
</el-table-column>
<el-table-column prop="paymentRate" label="本次收票比例"></el-table-column> <el-table-column prop="paymentRate" label="本次收票比例"></el-table-column>
<el-table-column prop="receiptStatus" label="收票状态"> <el-table-column prop="receiptStatus" label="收票状态">
<template slot-scope="scope"> <template slot-scope="scope">
<dict-tag :options="dict.type.receipt_status" :value="scope.row.ticketStatus"/> <dict-tag :options="dict.type.receipt_status" :value="scope.row.ticketStatus"/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="ticketBillCode" label="采购-收票单编号"></el-table-column> <el-table-column prop="ticketBillCode" label="采购收票单编号"></el-table-column>
<el-table-column label="发票/红冲发票"> <el-table-column label="发票">
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="scope.row.finAttachment"> <span v-if="scope.row.finAttachment">
<el-button type="text" size="mini" icon="el-icon-view" @click="handlePreview(scope.row.finAttachment)"></el-button> <el-button type="text" size="mini" icon="el-icon-view" @click="handlePreview(scope.row.finAttachment)"></el-button>
@ -275,8 +266,7 @@ export default {
return sums; return sums;
}, },
handleClose() { handleClose() {
this.internalVisible = false; // Close dialog local this.internalVisible = false; // Close dialog locally
this.$emit('close');
}, },
handleSubmit() { handleSubmit() {
this.handleClose(); this.handleClose();

View File

@ -3,77 +3,63 @@
<div class="dialog-body"> <div class="dialog-body">
<el-form ref="form" :model="form" :inline="true" label-width="120px"> <el-form ref="form" :model="form" :inline="true" label-width="120px">
<el-row> <el-row>
<!-- <el-col :span="8">--> <el-col :span="8">
<!-- <el-form-item label="付款单类型" prop="paymentBillType">--> <el-form-item label="付款单类型" prop="paymentBillType">
<!-- <el-select disabled v-model="form.paymentBillType" placeholder="请选择付款单类型" clearable>--> <el-select disabled v-model="form.paymentBillType" placeholder="请选择付款单类型" clearable>
<!-- <el-option--> <el-option
<!-- v-for="dict in dict.type.payment_bill_type"--> v-for="dict in dict.type.payment_bill_type"
<!-- :key="dict.value"--> :key="dict.value"
<!-- :label="dict.label"--> :label="dict.label"
<!-- :value="dict.value"--> :value="dict.value"
<!-- />--> />
<!-- </el-select>--> </el-select>
<!-- </el-form-item>--> </el-form-item>
<!-- </el-col>--> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="制造商名称"> <el-form-item label="制造商名称">
<el-input v-model="form.vendorName" readonly/> <el-input v-model="form.vendorName" readonly/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<!-- <el-col :span="8">--> <el-col :span="8">
<!-- <el-form-item label="预计付款时间" prop="estimatedPaymentTime">--> <el-form-item label="预计付款时间" prop="estimatedPaymentTime">
<!-- <el-date-picker--> <el-date-picker
<!-- v-model="form.estimatedPaymentTime"--> v-model="form.estimatedPaymentTime"
<!-- type="date"--> type="date"
<!-- value-format="yyyy-MM-dd HH:mm:ss"--> value-format="yyyy-MM-dd HH:mm:ss"
<!-- placeholder="选择日期"--> placeholder="选择日期"
<!-- ></el-date-picker>--> ></el-date-picker>
<!-- </el-form-item>--> </el-form-item>
<!-- </el-col>--> </el-col>
</el-row> </el-row>
</el-form> </el-form>
<el-divider content-position="left">采购应付单表</el-divider> <el-divider content-position="left">采购应付单表</el-divider>
<el-table :data="payableOrdersWithPlans" border max-height="300px" style="margin-bottom: 20px;"> <el-table :data="payableOrdersWithPlans" border max-height="300px" style="margin-bottom: 20px;">
<el-table-column label="采购-应付单编号" align="center" prop="payableBillCode" width="150"/> <el-table-column label="应付单编号" align="center" prop="payableBillCode" width="150"/>
<el-table-column label="预计付款时间" align="center" prop="planPaymentDate" width="180"/> <el-table-column label="预计付款时间" align="center" prop="planPaymentDate" width="180"/>
<el-table-column label="预期付款计划" align="center" width="100" prop="planAmount"> <el-table-column label="付款计划" align="center" width="100" prop="planAmount">
</el-table-column>
<el-table-column label="项目名称" align="center" prop="projectName" width="150"/>
<el-table-column label="合同编号" align="center" prop="orderCode" width="150"/>
<el-table-column label="出入库单号" align="center" prop="inventoryCode" width="150"/>
<el-table-column label="付款状态" align="center" prop="paymentStatus" width="120">
<template slot-scope="scope">
<dict-tag :options="dict.type.payment_status" :value="scope.row.paymentStatus"/>
</template>
</el-table-column>
<el-table-column label="含税总价" align="center" prop="totalPriceWithTax" width="120"/>
<el-table-column label="未付款金额" align="center" prop="unpaidAmount" width="120"/>
<el-table-column label="本次付款金额" align="center" width="120">
<template slot-scope="scope"> <template slot-scope="scope">
{{ calculateOrderCurrentPaymentAmount(scope.row.id).toFixed(2) }} {{ calculateOrderCurrentPaymentAmount(scope.row.id).toFixed(2) }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="预期付款比例" align="center" width="120"> <el-table-column label="本次付款比例" align="center" width="120">
<template slot-scope="scope"> <template slot-scope="scope">
{{ calculateOrderCurrentPaymentRate(scope.row.id) }} {{ calculateOrderCurrentPaymentRate(scope.row.id) }}%
</template>
</el-table-column>
<el-table-column label="项目名称" align="center" prop="projectName" />
<el-table-column label="制造商名称" align="center" prop="vendorName" />
<!-- <el-table-column label="合同编号" align="center" prop="orderCode" width="150"/>-->
<!-- <el-table-column label="出入库单号" align="center" prop="inventoryCode" width="150"/>-->
<!-- <el-table-column label="付款状态" align="center" prop="paymentStatus" width="120">-->
<!-- <template slot-scope="scope">-->
<!-- <dict-tag :options="dict.type.payment_status" :value="scope.row.paymentStatus"/>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column label="含税总价(元)" align="center" prop="totalPriceWithTax" width="120"/>
<el-table-column label="未付款金额(元)" align="center" prop="unpaidPaymentAmount" width="120"/>
<!-- <el-table-column label="本次付款金额" align="center" width="120">-->
<!-- <template slot-scope="scope">-->
<!-- {{ calculateOrderCurrentPaymentAmount(scope.row.id).toFixed(2) }}-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column label="本次付款比例" align="center" width="120">-->
<!-- <template slot-scope="scope">-->
<!-- {{ calculateOrderCurrentPaymentRate(scope.row.id) }}%-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column label="已付款金额(元)" align="center" prop="paidPaymentAmount" width="120"/>
<el-table-column label="付款中金额(元)" align="center" prop="paidAmount" width="120">
<template slot-scope="scope">
{{ $calc.sub($calc.sub(scope.row.totalPriceWithTax, scope.row.paidPaymentAmount), scope.row.unpaidPaymentAmount) }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="已付款金额" align="center" prop="paidAmount" width="120"/>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="100" fixed="right"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="100" fixed="right">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
@ -253,10 +239,10 @@ export default {
this.$modal.msgError('请选择付款单类型'); this.$modal.msgError('请选择付款单类型');
return; return;
} }
// if (!this.form.estimatedPaymentTime) { if (!this.form.estimatedPaymentTime) {
// this.$modal.msgError(''); this.$modal.msgError('请选择预计付款时间');
// return; return;
// } }
// Validate each payable order's payment plans // Validate each payable order's payment plans
for (const order of this.payableOrdersWithPlans) { for (const order of this.payableOrdersWithPlans) {

View File

@ -1,20 +1,20 @@
<template> <template>
<el-dialog title="合并发起收票单" :close-on-click-modal="false" :visible.sync="dialogVisible" width="80%" @close="handleClose" append-to-body> <el-dialog title="合并发起收票单" :visible.sync="dialogVisible" width="80%" @close="handleClose" append-to-body>
<div class="dialog-body"> <div class="dialog-body">
<el-form ref="form" :model="form" :inline="true" label-width="120px"> <el-form ref="form" :model="form" :inline="true" label-width="120px">
<el-row> <el-row>
<!-- <el-col :span="8">--> <el-col :span="8">
<!-- <el-form-item label="收票单类型" prop="ticketBillType">--> <el-form-item label="收票单类型" prop="ticketBillType">
<!-- <el-select disabled v-model="form.ticketBillType" placeholder="请选择收票单类型" clearable>--> <el-select disabled v-model="form.ticketBillType" placeholder="请选择收票单类型" clearable>
<!-- <el-option--> <el-option
<!-- v-for="dict in dict.type.payment_bill_type"--> v-for="dict in dict.type.payment_bill_type"
<!-- :key="dict.value"--> :key="dict.value"
<!-- :label="dict.label"--> :label="dict.label"
<!-- :value="dict.value"--> :value="dict.value"
<!-- />--> />
<!-- </el-select>--> </el-select>
<!-- </el-form-item>--> </el-form-item>
<!-- </el-col>--> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="制造商名称"> <el-form-item label="制造商名称">
<el-input v-model="form.vendorName" readonly/> <el-input v-model="form.vendorName" readonly/>
@ -31,10 +31,10 @@
<!-- </el-form-item>--> <!-- </el-form-item>-->
<!-- </el-col>--> <!-- </el-col>-->
<el-col :span="8"> <el-col :span="8">
<el-form-item label="制造商开票时间" prop="vendorTicketTime"> <el-form-item label="厂家开票时间" prop="vendorTicketTime">
<el-date-picker <el-date-picker
v-model="form.vendorTicketTime" v-model="form.vendorTicketTime"
type="datetime" type="date"
value-format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss"
placeholder="选择日期" placeholder="选择日期"
></el-date-picker> ></el-date-picker>
@ -45,38 +45,31 @@
<el-divider content-position="left">采购应付单表</el-divider> <el-divider content-position="left">采购应付单表</el-divider>
<el-table :data="payableOrdersWithPlans" border max-height="300px" style="margin-bottom: 20px;"> <el-table :data="payableOrdersWithPlans" border max-height="300px" style="margin-bottom: 20px;">
<el-table-column label="采购-应付单编号" align="center" prop="payableBillCode" width="150"/> <el-table-column label="应付单编号" align="center" prop="payableBillCode" width="150"/>
<el-table-column label="预计收票时间" align="center" prop="planTicketDate" width="180"/> <el-table-column label="预计收票时间" align="center" prop="planTicketDate" width="180"/>
<!-- <el-table-column label="收票计划" align="center" width="100" prop="planTicketAmount">--> <el-table-column label="收票计划" align="center" width="100" prop="planTicketAmount">
<!-- </el-table-column>--> </el-table-column>
<el-table-column label="预期收票计划" align="center" width="120"> <el-table-column label="项目名称" align="center" prop="projectName" width="150"/>
<el-table-column label="合同编号" align="center" prop="orderCode" width="150"/>
<el-table-column label="出入库单号" align="center" prop="inventoryCode" width="150"/>
<el-table-column label="收票状态" align="center" prop="invoiceStatus" width="120">
<template slot-scope="scope">
<dict-tag :options="dict.type.invoice_status" :value="scope.row.invoiceStatus"/>
</template>
</el-table-column>
<el-table-column label="含税总价" align="center" prop="totalPriceWithTax" width="120"/>
<el-table-column label="未收票金额" align="center" prop="unInvoicedAmount" width="120"/>
<el-table-column label="本次收票金额" align="center" width="120">
<template slot-scope="scope"> <template slot-scope="scope">
{{ calculateOrderCurrentTicketAmount(scope.row.id).toFixed(2) }} {{ calculateOrderCurrentTicketAmount(scope.row.id).toFixed(2) }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="预期收票比例" align="center" width="120"> <el-table-column label="本次收票比例" align="center" width="120">
<template slot-scope="scope"> <template slot-scope="scope">
{{ calculateOrderCurrentTicketRate(scope.row.id) }} {{ calculateOrderCurrentTicketRate(scope.row.id) }}%
</template>
</el-table-column>
<el-table-column label="项目名称" align="center" prop="projectName" />
<el-table-column label="制造商名称" align="center" prop="vendorName" />
<!-- <el-table-column label="合同编号" align="center" prop="orderCode" width="150"/>-->
<!-- <el-table-column label="出入库单号" align="center" prop="inventoryCode" width="150"/>-->
<!-- <el-table-column label="收票状态" align="center" prop="invoiceStatus" width="120">-->
<!-- <template slot-scope="scope">-->
<!-- <dict-tag :options="dict.type.invoice_status" :value="scope.row.invoiceStatus"/>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column label="含税总价(元)" align="center" prop="totalPriceWithTax" width="120"/>
<el-table-column label="未收票金额(元)" align="center" prop="unreceivedTicketAmount" width="120"/>
<el-table-column label="已收票金额(元)" align="center" prop="receivedTicketAmount" width="120"/>
<el-table-column label="收票中金额(元)" align="center" prop="invoicedAmount" width="120">
<template slot-scope="scope">
{{ $calc.sub($calc.sub(scope.row.totalPriceWithTax,scope.row.receivedTicketAmount),scope.row.unreceivedTicketAmount)}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="已收票金额" align="center" prop="invoicedAmount" width="120"/>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="100" fixed="right"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="100" fixed="right">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button

View File

@ -19,7 +19,7 @@
<el-table-column label="序号" type="index" width="50" align="center"></el-table-column> <el-table-column label="序号" type="index" width="50" align="center"></el-table-column>
<el-table-column label="预计付款时间" align="center" width="200"> <el-table-column label="预计付款时间" align="center" width="200">
<template slot-scope="scope"> <template slot-scope="scope">
<el-date-picker v-model="scope.row.planPaymentDate" type="datetime" style="width: 180px" <el-date-picker v-model="scope.row.planPaymentDate" type="date" style="width: 180px"
value-format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss"
placeholder="选择日期" placeholder="选择日期"
:disabled="!isEditing || isNumberStr(scope.row.detailId)"></el-date-picker> :disabled="!isEditing || isNumberStr(scope.row.detailId)"></el-date-picker>

View File

@ -15,7 +15,7 @@
<el-table-column label="序号" type="index" width="50" align="center"></el-table-column> <el-table-column label="序号" type="index" width="50" align="center"></el-table-column>
<el-table-column label="预计收票时间" align="center" width="200"> <el-table-column label="预计收票时间" align="center" width="200">
<template slot-scope="scope"> <template slot-scope="scope">
<el-date-picker v-model="scope.row.planTicketDate" type="datetime" style="width: 180px" <el-date-picker v-model="scope.row.planTicketDate" type="date" style="width: 180px"
value-format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss"
placeholder="选择日期" placeholder="选择日期"
:disabled="!isEditing || isNumberStr(scope.row.detailId)"></el-date-picker> :disabled="!isEditing || isNumberStr(scope.row.detailId)"></el-date-picker>

View File

@ -1,14 +1,14 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="150px"> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="100px">
<!-- <el-form-item label="项目编号" prop="projectCode">--> <el-form-item label="项目编号" prop="projectCode">
<!-- <el-input--> <el-input
<!-- v-model="queryParams.projectCode"--> v-model="queryParams.projectCode"
<!-- placeholder="请输入项目编号"--> placeholder="请输入项目编号"
<!-- clearable--> clearable
<!-- @keyup.enter.native="handleQuery"--> @keyup.enter.native="handleQuery"
<!-- />--> />
<!-- </el-form-item>--> </el-form-item>
<el-form-item label="项目名称" prop="projectName"> <el-form-item label="项目名称" prop="projectName">
<el-input <el-input
v-model="queryParams.projectName" v-model="queryParams.projectName"
@ -17,7 +17,7 @@
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="采购-应付单编号" prop="payableBillCode"> <el-form-item label="应付单编号" prop="payableBillCode">
<el-input <el-input
v-model="queryParams.payableBillCode" v-model="queryParams.payableBillCode"
placeholder="请输入应付单编号" placeholder="请输入应付单编号"
@ -59,26 +59,26 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- <el-form-item label="付款状态" prop="paymentStatus">--> <el-form-item label="付款状态" prop="paymentStatus">
<!-- <el-select v-model="queryParams.paymentStatus" placeholder="请选择付款状态" clearable>--> <el-select v-model="queryParams.paymentStatus" placeholder="请选择付款状态" clearable>
<!-- <el-option--> <el-option
<!-- v-for="dict in dict.type.payment_status"--> v-for="dict in dict.type.payment_status"
<!-- :key="dict.value"--> :key="dict.value"
<!-- :label="dict.label"--> :label="dict.label"
<!-- :value="dict.value"--> :value="dict.value"
<!-- />--> />
<!-- </el-select>--> </el-select>
<!-- </el-form-item>--> </el-form-item>
<!-- <el-form-item label="收票状态" prop="paymentStatus">--> <el-form-item label="收票状态" prop="paymentStatus">
<!-- <el-select v-model="queryParams.paymentStatus" placeholder="请选择付款状态" clearable>--> <el-select v-model="queryParams.paymentStatus" placeholder="请选择付款状态" clearable>
<!-- <el-option--> <el-option
<!-- v-for="dict in dict.type.payment_status"--> v-for="dict in dict.type.payment_status"
<!-- :key="dict.value"--> :key="dict.value"
<!-- :label="dict.label"--> :label="dict.label"
<!-- :value="dict.value"--> :value="dict.value"
<!-- />--> />
<!-- </el-select>--> </el-select>
<!-- </el-form-item>--> </el-form-item>
<!-- <el-form-item label="生成时间">--> <!-- <el-form-item label="生成时间">-->
<!-- <el-date-picker--> <!-- <el-date-picker-->
<!-- v-model="dateRange"--> <!-- v-model="dateRange"-->
@ -93,9 +93,9 @@
<el-form-item label="预计付款时间"> <el-form-item label="预计付款时间">
<el-date-picker <el-date-picker
v-model="estimatedPaymentDateRange" v-model="estimatedPaymentDateRange"
style="width: 350px" style="width: 240px"
value-format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss"
type="datetimerange" type="daterange"
range-separator="-" range-separator="-"
start-placeholder="开始日期" start-placeholder="开始日期"
end-placeholder="结束日期" end-placeholder="结束日期"
@ -109,13 +109,13 @@
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5" > <el-col :span="1.5" >
<el-button type="primary" plain @click="handleMergeAndInitiatePayment" v-hasPermi="['finance:payable:mergePayment']"> <el-button type="primary" plain icon="el-icon-plus" @click="handleMergeAndInitiatePayment" v-hasPermi="['finance:payable:mergePayment']">
合并发起付款单 合并发起付款单
</el-button> </el-button>
</el-col> </el-col>
<el-col :span="1.5" > <el-col :span="1.5" >
<el-button type="primary" plain @click="handleMergeAndInitiateReceipt" v-hasPermi="['inventory:inner:add']"> <el-button type="primary" plain icon="el-icon-plus" @click="handleMergeAndInitiateReceipt" v-hasPermi="['inventory:inner:add']">
合并发起收票单 合并发起收票单
</el-button> </el-button>
</el-col> </el-col>
@ -124,15 +124,11 @@
<el-table v-loading="loading" :data="payableList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="payableList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="50" /> <el-table-column type="selection" width="50" />
<!-- <el-table-column label="项目编号" align="center" prop="projectCode" width="120" />--> <el-table-column label="项目编号" align="center" prop="projectCode" width="120" />
<el-table-column label="项目名称" align="center" prop="projectName" width="260" /> <el-table-column label="项目名称" align="center" prop="projectName" width="260" />
<el-table-column label="采购-应付单编号" align="center" prop="payableBillCode" width="150" /> <el-table-column label="应付单编号" align="center" prop="payableBillCode" width="150" />
<!-- <el-table-column label="生成时间" align="center" prop="createTime" width="180"/>--> <!-- <el-table-column label="生成时间" align="center" prop="createTime" width="180"/>-->
<el-table-column label="预计付款时间" align="center" prop="planPaymentDate" width="180"> <el-table-column label="预计付款时间" align="center" prop="planPaymentDate" width="180"/>
<template slot-scope="scope">
<span :style="getPaymentDateStyle(scope.row.planPaymentDate)">{{ scope.row.planPaymentDate }}</span>
</template>
</el-table-column>
<el-table-column label="预计付款金额" align="center" prop="planAmount" width="120" /> <el-table-column label="预计付款金额" align="center" prop="planAmount" width="120" />
<el-table-column label="该制造商是否有预付单" align="center" prop="hasAdvancePayment" width="150"> <el-table-column label="该制造商是否有预付单" align="center" prop="hasAdvancePayment" width="150">
<template slot-scope="scope"> <template slot-scope="scope">
@ -148,7 +144,7 @@
<dict-tag :options="dict.type.product_type" :value="scope.row.productType"/> <dict-tag :options="dict.type.product_type" :value="scope.row.productType"/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="含税总价(元)" align="center" prop="totalPriceWithTax" width="120" /> <el-table-column label="含税总价" align="center" prop="totalPriceWithTax" width="120" />
<!-- <el-table-column label="未税总价" align="center" prop="totalPriceWithoutTax" width="120" />--> <!-- <el-table-column label="未税总价" align="center" prop="totalPriceWithoutTax" width="120" />-->
<!-- <el-table-column label="税额" align="center" prop="taxAmount" width="120" />--> <!-- <el-table-column label="税额" align="center" prop="taxAmount" width="120" />-->
<!-- <el-table-column label="付款状态" align="center" prop="paymentStatus" width="120">--> <!-- <el-table-column label="付款状态" align="center" prop="paymentStatus" width="120">-->
@ -175,8 +171,8 @@
<!-- >生成收票单</el-button>--> <!-- >生成收票单</el-button>-->
<!-- </template>--> <!-- </template>-->
<!-- </el-table-column>--> <!-- </el-table-column>-->
<el-table-column label="未付款金额(元)" align="center" prop="unpaidPaymentAmount" width="120" /> <el-table-column label="未付款金额" align="center" prop="unpaidPaymentAmount" width="120" />
<el-table-column label="未收票金额(元)" align="center" prop="unreceivedTicketAmount" width="120" /> <el-table-column label="未收票金额" align="center" prop="unreceivedTicketAmount" width="120" />
<!-- <el-table-column label="付款中金额" align="center" prop="payingAmount" width="120" />--> <!-- <el-table-column label="付款中金额" align="center" prop="payingAmount" width="120" />-->
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="300" fixed="right"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="300" fixed="right">
<template slot-scope="scope"> <template slot-scope="scope">
@ -216,7 +212,7 @@
/> />
<!-- 修改弹窗 --> <!-- 修改弹窗 -->
<edit-form :visible.sync="open" :data="selectedRow" @close="getList" /> <edit-form :visible.sync="open" :data="selectedRow" />
<!-- 合并付款单弹窗 --> <!-- 合并付款单弹窗 -->
<merge-payment-dialog :visible.sync="isMergePaymentDialogOpen" :payable-orders="selectedPayableRows" @confirm="confirmMergePayment" /> <merge-payment-dialog :visible.sync="isMergePaymentDialogOpen" :payable-orders="selectedPayableRows" @confirm="confirmMergePayment" />
@ -330,6 +326,14 @@ export default {
this.$modal.msgSuccess("删除成功"); this.$modal.msgSuccess("删除成功");
}).catch(() => {}); }).catch(() => {});
}, },
/** 生成付款单按钮操作 */
handleGeneratePayment(row) {
console.log("handleGeneratePayment", row);
},
/** 生成收票单按钮操作 */
handleGenerateInvoice(row) {
console.log("handleGenerateInvoice", row);
},
/** 多选框选中数据 */ /** 多选框选中数据 */
handleSelectionChange(selection) { handleSelectionChange(selection) {
this.selectedPayableRows = selection; this.selectedPayableRows = selection;
@ -348,14 +352,9 @@ export default {
this.$modal.msgWarning("请选择至少一条应付单进行合并操作"); this.$modal.msgWarning("请选择至少一条应付单进行合并操作");
return; return;
} }
let every = this.selectedPayableRows.every(item=>item.planAmount>0);
if (!every){
this.$modal.msgWarning("温馨提示:您勾选的应付单中有已全部付款完成的应付单,请勿重复操作");
return;
}
let vendorLength = new Set(this.selectedPayableRows.map(item=>item.vendorCode)).size; let vendorLength = new Set(this.selectedPayableRows.map(item=>item.vendorCode)).size;
if (vendorLength > 1) { if (vendorLength > 1) {
this.$modal.msgWarning("温馨提示:您勾选的应付单中有不同供应商,合并发起付款单需为同一供应商,请重新勾选"); this.$modal.msgWarning("请选择同一家供应商的应付单进行合并操作");
return; return;
} }
@ -375,14 +374,9 @@ export default {
this.$modal.msgWarning("请选择至少一条应付单进行合并操作"); this.$modal.msgWarning("请选择至少一条应付单进行合并操作");
return; return;
} }
let every = this.selectedPayableRows.every(item=>item.planTicketAmount>0);
if (!every){
this.$modal.msgWarning("温馨提示:您勾选的应付单中有已全部收票完成的应付单,请勿重复操作");
return;
}
let vendorLength = new Set(this.selectedPayableRows.map(item=>item.vendorCode)).size; let vendorLength = new Set(this.selectedPayableRows.map(item=>item.vendorCode)).size;
if (vendorLength > 1) { if (vendorLength > 1) {
this.$modal.msgWarning("温馨提示:您勾选的应付单中有不同供应商,合并发起收票单需为同一供应商,请重新勾选"); this.$modal.msgWarning("请选择同一家供应商的应付单进行合并操作");
return; return;
} }
@ -395,16 +389,6 @@ export default {
this.isMergeReceiptDialogOpen = false; this.isMergeReceiptDialogOpen = false;
this.getList(); // Refresh the list this.getList(); // Refresh the list
}); });
},
getPaymentDateStyle(dateStr) {
if (!dateStr) return {};
let planDate = new Date(dateStr).getTime();
let tenDaysLater = new Date().getTime() + 10 * 24 * 60 * 60 * 1000;
if (planDate <= tenDaysLater) {
return { color: '#ffba00' };
}
return {};
} }
} }
}; };

View File

@ -18,28 +18,31 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<!-- <el-row>-->
<!-- <el-col :span="24">-->
<!-- <el-form-item label="预计付款时间" prop="estimatedPaymentTime">-->
<!-- <el-date-picker-->
<!-- v-model="form.estimatedPaymentTime"-->
<!-- type="date"-->
<!-- value-format="yyyy-MM-dd HH:mm:ss"-->
<!-- placeholder="选择日期"-->
<!-- ></el-date-picker>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- </el-row>-->
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="备注" prop="paymentBillType"> <el-form-item label="预计付款时间" prop="estimatedPaymentTime">
<el-checkbox v-model="form.paymentBillType" true-label="PRE_PAYMENT" false-label="FROM_PAYABLE"></el-checkbox> <el-date-picker
v-model="form.estimatedPaymentTime"
type="date"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="选择日期"
></el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="是否预付" prop="paymentBillType">
<el-radio-group v-model="form.paymentBillType">
<el-radio label="PRE_PAYMENT"></el-radio>
<el-radio label="FROM_PAYABLE"></el-radio>
</el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row v-if="form.paymentBillType === 'PRE_PAYMENT'"> <el-row v-if="form.paymentBillType === 'PRE_PAYMENT'">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="含税总价(元)" prop="totalPriceWithTax"> <el-form-item label="预付金额" prop="totalPriceWithTax">
<el-input-number v-model="form.totalPriceWithTax" :precision="2" :step="100" <el-input-number v-model="form.totalPriceWithTax" :precision="2" :step="100"
style="width: 100%"></el-input-number> style="width: 100%"></el-input-number>
</el-form-item> </el-form-item>
@ -49,7 +52,7 @@
<!-- Tables --> <!-- Tables -->
<div v-if="form.vendorCode"> <div v-if="form.vendorCode">
<div v-if="form.paymentBillType === 'FROM_PAYABLE'" class="table-container"> <div v-if="form.paymentBillType === 'FROM_PAYABLE'" class="table-container">
<h4>采购-应付单表</h4> <h4>应付单</h4>
<el-table <el-table
ref="payableTable" ref="payableTable"
:data="payableList" :data="payableList"
@ -58,48 +61,33 @@
@selection-change="handleSelectionChange" @selection-change="handleSelectionChange"
max-height="400" max-height="400"
row-key="id" row-key="id"
show-summary
:summary-method="getPayableSummary"
> >
<el-table-column type="selection" width="55" reserve-selection></el-table-column> <el-table-column type="selection" width="55" reserve-selection></el-table-column>
<el-table-column label="采购-应付单编号" align="center" prop="payableBillCode" width="150"/> <el-table-column label="应付单编号" align="center" prop="payableBillCode" width="150"/>
<el-table-column label="预计付款时间" align="center" prop="planPaymentDate" width="180"/> <el-table-column label="预计付款时间" align="center" prop="planPaymentDate" width="180"/>
<el-table-column label="预期付款计划" align="center" width="100" prop="planAmount"> <el-table-column label="付款计划" align="center" width="100" prop="planAmount">
<template slot-scope="scope">
{{ calculateOrderCurrentPaymentAmount(scope.row) }}
</template>
</el-table-column>
<el-table-column label="预期付款比例" align="center" prop="projectCode" width="150">
<template slot-scope="scope">
{{ $calc.mul($calc.div(calculateOrderCurrentPaymentAmount(scope.row), scope.row.totalPriceWithTax,4),100) }}
</template>
</el-table-column> </el-table-column>
<el-table-column label="项目名称" align="center" prop="projectName" width="150"/> <el-table-column label="项目名称" align="center" prop="projectName" width="150"/>
<el-table-column label="制造商名称" align="center" prop="vendorName" width="150"/> <el-table-column label="合同编号" align="center" prop="orderCode" width="150"/>
<!-- <el-table-column label="出入库单号" align="center" prop="inventoryCode" width="150"/>--> <el-table-column label="出入库单号" align="center" prop="inventoryCode" width="150"/>
<!-- <el-table-column label="付款状态" align="center" prop="paymentStatus" width="120">--> <el-table-column label="付款状态" align="center" prop="paymentStatus" width="120">
<!-- <template slot-scope="scope">-->
<!-- <dict-tag :options="dict.type.payment_status" :value="scope.row.paymentStatus"/>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column label="含税总价(元)" align="center" prop="totalPriceWithTax" width="120"/>
<el-table-column label="未付款金额" align="center" prop="unpaidPaymentAmount" width="120"/>
<!-- <el-table-column label="本次付款金额" align="center" width="120">-->
<!-- <template slot-scope="scope">-->
<!-- {{ calculateOrderCurrentPaymentAmount(scope.row).toFixed(2) }}-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column label="本次付款比例" align="center" width="120">-->
<!-- <template slot-scope="scope">-->
<!-- {{ calculateOrderCurrentPaymentRate(scope.row) }}%-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column label="已付款金额" align="center" prop="paidPaymentAmount" width="120"/>
<el-table-column label="付款中金额" align="center" prop="paidAmount" width="120">
<template slot-scope="scope"> <template slot-scope="scope">
{{ $calc.sub($calc.sub(scope.row.totalPriceWithTax, scope.row.paidPaymentAmount), scope.row.unpaidPaymentAmount) }} <dict-tag :options="dict.type.payment_status" :value="scope.row.paymentStatus"/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="含税总价" align="center" prop="totalPriceWithTax" width="120"/>
<el-table-column label="未付款金额" align="center" prop="unpaidAmount" width="120"/>
<el-table-column label="本次付款金额" align="center" width="120">
<template slot-scope="scope">
{{ calculateOrderCurrentPaymentAmount(scope.row).toFixed(2) }}
</template>
</el-table-column>
<el-table-column label="本次付款比例" align="center" width="120">
<template slot-scope="scope">
{{ calculateOrderCurrentPaymentRate(scope.row) }}%
</template>
</el-table-column>
<el-table-column label="已付款金额" align="center" prop="paidAmount" width="120"/>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="100" <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="100"
fixed="right"> fixed="right">
<template slot-scope="scope"> <template slot-scope="scope">
@ -218,7 +206,7 @@ export default {
}, },
rules: { rules: {
vendorCode: [{required: true, message: "制造商名称不能为空", trigger: "change"}], vendorCode: [{required: true, message: "制造商名称不能为空", trigger: "change"}],
// estimatedPaymentTime: [{required: true, message: "", trigger: "change"}], estimatedPaymentTime: [{required: true, message: "预计付款时间不能为空", trigger: "change"}],
paymentBillType: [{required: true, message: "请选择是否预付", trigger: "change"}], paymentBillType: [{required: true, message: "请选择是否预付", trigger: "change"}],
totalPriceWithTax: [{required: false, message: "预付金额不能为空", trigger: "blur"}] totalPriceWithTax: [{required: false, message: "预付金额不能为空", trigger: "blur"}]
}, },
@ -290,8 +278,7 @@ export default {
const query = { const query = {
vendorCode: this.form.vendorCode, vendorCode: this.form.vendorCode,
pageNum: this.queryParams.pageNum, pageNum: this.queryParams.pageNum,
pageSize: this.queryParams.pageSize, pageSize: this.queryParams.pageSize
unpaidPaymentAmount:-1
}; };
if (this.form.paymentBillType === 'FROM_PAYABLE') { if (this.form.paymentBillType === 'FROM_PAYABLE') {
@ -388,33 +375,6 @@ export default {
} }
return 0; return 0;
}, },
getPayableSummary(param) {
const { columns, data } = param;
const sums = [];
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = '合计';
return;
}
if (column.label === '预期付款计划') {
const values = data.map(item => Number(this.calculateOrderCurrentPaymentAmount(item)));
if (!values.every(value => isNaN(value))) {
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return prev + curr;
} else {
return prev;
}
}, 0);
sums[index] = sums[index].toFixed(2);
} else {
sums[index] = '';
}
}
});
return sums;
},
handleClose() { handleClose() {
this.internalVisible = false; this.internalVisible = false;
@ -459,7 +419,7 @@ export default {
} else { } else {
// Prepayment logic // Prepayment logic
console.log(this.selectedRows)
if (this.selectedRows.length > 1) { if (this.selectedRows.length > 1) {
this.$modal.msgWarning("只能选择一笔订单"); this.$modal.msgWarning("只能选择一笔订单");
return; return;
@ -478,7 +438,7 @@ export default {
paymentTime: this.form.estimatedPaymentTime, paymentTime: this.form.estimatedPaymentTime,
totalPriceWithTax:this.form.totalPriceWithTax totalPriceWithTax:this.form.totalPriceWithTax
}; };
console.log(submitData)
this.$emit("submit", submitData); this.$emit("submit", submitData);
} }
} }

View File

@ -1,10 +1,9 @@
<template> <template>
<el-drawer <el-drawer
title="采购-付款单详情" title="付款单详情"
:visible.sync="visible" :visible.sync="visible"
direction="rtl" direction="rtl"
size="70%" size="70%"
:wrapper-closable="false"
@close="handleClose" @close="handleClose"
> >
<div class="dialog-body" v-if="detail"> <div class="dialog-body" v-if="detail">
@ -24,13 +23,13 @@
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="8"> <el-col :span="8">
<div class="detail-item">含税总价(): {{ detail.totalPriceWithTax }}</div> <div class="detail-item">含税总价: {{ detail.totalPriceWithTax }}</div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="detail-item">未税总价(): {{ detail.totalPriceWithoutTax }}</div> <div class="detail-item">未税总价: {{ detail.totalPriceWithoutTax }}</div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="detail-item">税额(): {{ detail.taxAmount }}</div> <div class="detail-item">税额: {{ detail.taxAmount }}</div>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
@ -43,7 +42,7 @@
<div class="detail-item">预付单剩余额度: {{ detail.preResidueAmount || '-' }}</div> <div class="detail-item">预付单剩余额度: {{ detail.preResidueAmount || '-' }}</div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="detail-item">实际付款时间: {{ detail.actualPaymentTime || '-'}}</div> <div class="detail-item">财务付款时间: {{ detail.actualPaymentTime || '-'}}</div>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
@ -94,7 +93,7 @@
<el-table-column type="index" label="序号" width="50"></el-table-column> <el-table-column type="index" label="序号" width="50"></el-table-column>
<el-table-column property="projectCode" label="项目编号"></el-table-column> <el-table-column property="projectCode" label="项目编号"></el-table-column>
<el-table-column property="projectName" label="项目名称"></el-table-column> <el-table-column property="projectName" label="项目名称"></el-table-column>
<el-table-column property="payableBillCode" label="采购-应付单编号"></el-table-column> <el-table-column property="payableBillCode" label="采购应付单编号"></el-table-column>
<el-table-column property="totalPriceWithTax" label="含税总价"></el-table-column> <el-table-column property="totalPriceWithTax" label="含税总价"></el-table-column>
<el-table-column property="paymentAmount" label="本次付款金额"></el-table-column> <el-table-column property="paymentAmount" label="本次付款金额"></el-table-column>
<el-table-column property="paymentRate" label="本次付款比例"></el-table-column> <el-table-column property="paymentRate" label="本次付款比例"></el-table-column>

View File

@ -5,7 +5,7 @@
</div> </div>
<div v-else class="receipt-dialog-body"> <div v-else class="receipt-dialog-body">
<div v-if="canUpload" class="upload-btn-container"> <div v-if="canUpload" class="upload-btn-container">
<el-button type="primary" icon="el-icon-upload" v-hasPermi="['finance:payment:upload']" @click="openUploadDialog">{{ titleText }}</el-button> <el-button type="primary" icon="el-icon-upload" @click="openUploadDialog">{{ titleText }}</el-button>
</div> </div>
<el-timeline v-if="attachments.length > 0"> <el-timeline v-if="attachments.length > 0">
@ -19,7 +19,7 @@
<div class="receipt-card-content"> <div class="receipt-card-content">
<div class="receipt-details"> <div class="receipt-details">
<div class="detail-item"> <div class="detail-item">
<span class="item-label">付方式</span> <span class="item-label">方式</span>
<span class="item-value"> <span class="item-value">
<dict-tag :options="dicts.payment_method" :value="paymentData.paymentMethod"/> <dict-tag :options="dicts.payment_method" :value="paymentData.paymentMethod"/>
</span> </span>
@ -110,7 +110,7 @@
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
<el-form :model="uploadForm" ref="uploadForm" label-width="120px" size="medium" > <el-form :model="uploadForm" ref="uploadForm" label-width="120px" size="medium" >
<el-form-item label="付方式"> <el-form-item label="方式">
<el-select v-model="uploadForm.paymentMethod" disabled style="width: 100%;"> <el-select v-model="uploadForm.paymentMethod" disabled style="width: 100%;">
<el-option <el-option
v-for="dict in dicts.payment_method" v-for="dict in dicts.payment_method"
@ -120,7 +120,7 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="paymentData.paymentBillType==='FROM_PAYABLE'?'回执单': '退款图'" required> <el-form-item label="退款图" required>
<div style="display: flex; flex-direction: column; align-items: flex-start;"> <div style="display: flex; flex-direction: column; align-items: flex-start;">
<el-upload <el-upload
ref="upload" ref="upload"

View File

@ -1,6 +1,6 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="130px"> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="100px">
<el-form-item label="项目编号" prop="projectCode"> <el-form-item label="项目编号" prop="projectCode">
<el-input <el-input
v-model="queryParams.projectCode" v-model="queryParams.projectCode"
@ -17,7 +17,7 @@
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="采购-付款单编号" prop="paymentBillCode"> <el-form-item label="付款单编号" prop="paymentBillCode">
<el-input <el-input
v-model="queryParams.paymentBillCode" v-model="queryParams.paymentBillCode"
placeholder="请输入付款单编号" placeholder="请输入付款单编号"
@ -25,15 +25,15 @@
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="制造商名称" prop="vendorName"> <el-form-item label="制造商名称" prop="vendorCode">
<el-input <el-input
v-model="queryParams.vendorName" v-model="queryParams.vendorCode"
placeholder="请输入制造商名称" placeholder="请输入制造商名称"
clearable clearable
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="采购-应付单编号" prop="payableBillCode"> <el-form-item label="应付单编号" prop="payableBillCode">
<el-input <el-input
v-model="queryParams.payableBillCode" v-model="queryParams.payableBillCode"
placeholder="请输入应付单编号" placeholder="请输入应付单编号"
@ -41,39 +41,29 @@
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="paymentBillType"> <el-form-item label="付款单类型" prop="paymentBillType">
<el-select v-model="queryParams.paymentBillType" placeholder="请选择备注" clearable> <el-select v-model="queryParams.paymentBillType" placeholder="请选择付款单类型" clearable>
<el-option v-for="dict in dict.type.payment_bill_type" :key="dict.value" :label="dict.label" :value="dict.value"></el-option> <el-option v-for="dict in dict.type.payment_bill_type" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="支付方式" prop="paymentMethod"> <el-form-item label="支付方式" prop="paymentMethod">
<el-select v-model="queryParams.paymentMethod" style="width: 100%;"> <el-select v-model="queryParams.paymentMethod" placeholder="请选择支付方式" clearable>
<el-option <el-option label="方式一" value="1" />
v-for="dict in dict.type.payment_method" <el-option label="方式二" value="2" />
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="付款状态" prop="paymentStatus">
<el-select v-model="queryParams.paymentStatus" placeholder="请选择付款状态" clearable>
<el-option
v-for="dict in dict.type.payment_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="审批状态" prop="approveStatus"> <el-form-item label="审批状态" prop="approveStatus">
<el-select v-model="queryParams.approveStatus" placeholder="请选择审批状态" clearable> <el-select v-model="queryParams.approveStatus" placeholder="请选择审批状态" clearable>
<el-option <el-option label="待提交" value="0" />
v-for="dict in dict.type.approve_status" <el-option label="审批中" value="1" />
:key="dict.value" <el-option label="已审批" value="2" />
:label="dict.label" <el-option label="已驳回" value="3" />
:value="dict.value" </el-select>
/> </el-form-item>
<el-form-item label="付款状态" prop="paymentStatus">
<el-select v-model="queryParams.paymentStatus" placeholder="请选择付款状态" clearable>
<el-option label="待付款" value="0" />
<el-option label="已付款" value="1" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="审批节点" prop="approveNode"> <el-form-item label="审批节点" prop="approveNode">
@ -84,12 +74,23 @@
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="审批通过时间">
<el-date-picker
v-model="dateRangeApproval"
style="width: 240px"
value-format="yyyy-MM-dd"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
></el-date-picker>
</el-form-item>
<el-form-item label="预计付款时间"> <el-form-item label="预计付款时间">
<el-date-picker <el-date-picker
v-model="dateRangeEstimated" v-model="dateRangeEstimated"
style="width: 240px" style="width: 240px"
value-format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd"
type="datetimerange" type="daterange"
range-separator="-" range-separator="-"
start-placeholder="开始日期" start-placeholder="开始日期"
end-placeholder="结束日期" end-placeholder="结束日期"
@ -99,26 +100,13 @@
<el-date-picker <el-date-picker
v-model="dateRangeActual" v-model="dateRangeActual"
style="width: 240px" style="width: 240px"
value-format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd"
type="datetimerange" type="daterange"
range-separator="-" range-separator="-"
start-placeholder="开始日期" start-placeholder="开始日期"
end-placeholder="结束日期" end-placeholder="结束日期"
></el-date-picker> ></el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="审批通过时间">
<el-date-picker
v-model="dateRangeApproval"
style="width: 240px"
value-format="yyyy-MM-dd HH:mm:ss"
type="datetimerange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
></el-date-picker>
</el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button> <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button> <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
@ -139,40 +127,36 @@
</el-row> </el-row>
<el-table v-loading="loading" :data="paymentList"> <el-table v-loading="loading" :data="paymentList">
<el-table-column label="采购-付款单编号" width="200" align="center" prop="paymentBillCode"/> <el-table-column label="付款单编号" align="center" prop="paymentBillCode" />
<el-table-column label="预计付款时间" align="center" prop="paymentTime" width="180"> <el-table-column label="预计付款时间" align="center" prop="paymentTime" width="180">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ parseTime(scope.row.paymentTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span> <span>{{ parseTime(scope.row.paymentTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="制造商名称" width="200" align="center" prop="vendorName"/> <el-table-column label="制造商名称" align="center" prop="vendorName" />
<el-table-column label="含税总价(元)" align="center" width="200" prop="totalPriceWithTax"> <el-table-column label="含税总价" align="center" prop="totalPriceWithTax" />
<template slot-scope="scope"> <el-table-column label="付款单类型" align="center" prop="paymentBillType" >
<span :style="scope.row.totalPriceWithTax<0?{color:'red'}:{}">{{ scope.row.totalPriceWithTax }}</span>
</template>
</el-table-column>
<el-table-column label="备注" align="center" width="100" prop="paymentBillType">
<template slot-scope="scope"> <template slot-scope="scope">
<dict-tag :options="dict.type.payment_bill_type" :value="scope.row.paymentBillType"/> <dict-tag :options="dict.type.payment_bill_type" :value="scope.row.paymentBillType"/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="预付单剩余额度" align="center" width="200" prop="preResidueAmount"/> <el-table-column label="预付单剩余额度" align="center" prop="preResidueAmount" />
<el-table-column label="实际付款时间" align="center" prop="actualPaymentTime" width="180"> <el-table-column label="实际付款时间" align="center" prop="actualPaymentTime" width="180">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ parseTime(scope.row.actualPaymentTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span> <span>{{ parseTime(scope.row.actualPaymentTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="支付方式" align="center" width="100" prop="paymentMethod"> <el-table-column label="支付方式" align="center" prop="paymentMethod" >
<template slot-scope="scope"> <template slot-scope="scope">
<dict-tag :options="dict.type.payment_method" :value="scope.row.paymentMethod"/> <dict-tag :options="dict.type.payment_method" :value="scope.row.paymentMethod"/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="付款状态" align="center" width="100" prop="paymentStatus"> <el-table-column label="付款状态" align="center" prop="paymentStatus" >
<template slot-scope="scope"> <template slot-scope="scope">
<dict-tag :options="dict.type.payment_status" :value="scope.row.paymentStatus"/> <dict-tag :options="dict.type.payment_status" :value="scope.row.paymentStatus"/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="审批状态" align="center" width="100" prop="approveStatus"> <el-table-column label="审批状态" align="center" prop="approveStatus" >
<template slot-scope="scope"> <template slot-scope="scope">
<dict-tag :options="dict.type.approve_status" :value="scope.row.approveStatus"/> <dict-tag :options="dict.type.approve_status" :value="scope.row.approveStatus"/>
</template> </template>
@ -182,8 +166,8 @@
<span>{{ parseTime(scope.row.approveTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span> <span>{{ parseTime(scope.row.approveTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="审批节点" fixed="right" width="150" align="center" prop="approveNode"/> <el-table-column label="审批节点" align="center" prop="approveNode" />
<el-table-column label="操作" fixed="right" width="400" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
size="mini" size="mini"
@ -202,21 +186,21 @@
size="mini" size="mini"
type="text" type="text"
icon="el-icon-position" icon="el-icon-position"
v-show="(scope.row.approveStatus==='0' || scope.row.approveStatus==='3') && (scope.row.paymentBillType==='FROM_PAYABLE'||scope.row.paymentBillType==='PRE_PAYMENT')" v-show="(scope.row.approveStatus==='0' || scope.row.approveStatus==='3')"
@click="applyPayment(scope.row)" @click="applyPayment(scope.row)"
>申请付款</el-button> >发起付款</el-button>
<!-- <el-button--> <el-button
<!-- size="mini"--> size="mini"
<!-- type="text"--> type="text"
<!-- icon="el-icon-position"--> icon="el-icon-position"
<!-- v-show="(scope.row.approveStatus==='0' || scope.row.approveStatus==='3') && scope.row.paymentBillType==='REFUND' "--> v-show="(scope.row.approveStatus==='0' || scope.row.approveStatus==='3') && scope.row.paymentBillType==='REFUND' "
<!-- @click="applyRefundApprove(scope.row)"--> @click="applyRefundApprove(scope.row)"
<!-- >发起退款</el-button>--> >发起退款</el-button>
<el-button <el-button
size="mini" size="mini"
type="text" type="text"
icon="el-icon-refresh-left" icon="el-icon-refresh-left"
v-show="scope.row.paymentBillType==='FROM_PAYABLE' && scope.row.paymentStatus==='1' && scope.row.approveStatus==='0' " v-show="scope.row.paymentBillType==='FROM_PAYABLE' && scope.row.paymentStatus==='1' && (scope.row.approveStatus==='0' || scope.row.approveStatus==='3')"
@click="handleReturn(scope.row)" @click="handleReturn(scope.row)"
>退回</el-button> >退回</el-button>
<el-button <el-button
@ -225,12 +209,12 @@
icon="el-icon-refresh-right" icon="el-icon-refresh-right"
v-if="scope.row.paymentStatus === '2' && scope.row.refundStatus !== 'REFUND_APPLIED' && scope.row.paymentBillType !== 'REFUND'" v-if="scope.row.paymentStatus === '2' && scope.row.refundStatus !== 'REFUND_APPLIED' && scope.row.paymentBillType !== 'REFUND'"
@click="handleApplyRefund(scope.row)" @click="handleApplyRefund(scope.row)"
>申请退款</el-button> >退款</el-button>
<el-button <el-button
size="mini" size="mini"
type="text" type="text"
icon="el-icon-refresh-right" icon="el-icon-refresh-right"
v-if="(scope.row.approveStatus === '2' || scope.row.approveStatus==='3') && (scope.row.paymentStatus==='1'||scope.row.paymentStatus==='3')" v-if="scope.row.paymentStatus === '1' && scope.row.approveStatus==='2'"
@click="handleRevoke(scope.row)" @click="handleRevoke(scope.row)"
>撤销</el-button> >撤销</el-button>
</template> </template>
@ -254,8 +238,8 @@
<!-- 付款申请弹窗 --> <!-- 付款申请弹窗 -->
<el-dialog title="发起付款" :visible.sync="applyPaymentOpen" width="600px" append-to-body> <el-dialog title="发起付款" :visible.sync="applyPaymentOpen" width="600px" append-to-body>
<el-form ref="applyPaymentForm" :model="applyPaymentForm" label-width="120px"> <el-form ref="applyPaymentForm" :model="applyPaymentForm" label-width="120px">
<el-form-item label="付方式" prop="paymentMethod"> <el-form-item label="方式" prop="paymentMethod">
<el-select v-model="applyPaymentForm.paymentMethod" placeholder="请选择付方式"> <el-select v-model="applyPaymentForm.paymentMethod" placeholder="请选择方式">
<el-option <el-option
v-for="dict in dict.type.payment_method" v-for="dict in dict.type.payment_method"
:key="dict.value" :key="dict.value"
@ -442,7 +426,7 @@ export default {
}, },
/** 退回按钮操作 */ /** 退回按钮操作 */
handleReturn(row) { handleReturn(row) {
this.$modal.confirm('是否将该笔采购-付款单退回至采购-应付单').then(function() { this.$modal.confirm('是否确认退回付款单编号为"' + row.paymentBillCode + '"的数据项?').then(function() {
return returnPayment(row.id); return returnPayment(row.id);
}).then(() => { }).then(() => {
this.getList(); this.getList();
@ -450,7 +434,7 @@ export default {
}).catch(() => {}); }).catch(() => {});
}, },
applyRefundApprove(row) { applyRefundApprove(row) {
this.$modal.confirm('收款单退款申请,确认提交至财务审批吗').then(function() { this.$modal.confirm('是否对付款单编号为"' + row.paymentBillCode + '"的数据项发起退款').then(function() {
return applyRefundApprove(row.id); return applyRefundApprove(row.id);
}).then(() => { }).then(() => {
this.getList(); this.getList();
@ -459,7 +443,7 @@ export default {
}, },
/** 申请退款按钮操作 */ /** 申请退款按钮操作 */
handleApplyRefund(row) { handleApplyRefund(row) {
this.$modal.confirm('收款单退款申请,确认提交至财务审批吗').then(() => { this.$modal.confirm('是否确认对付款单编号为"' + row.paymentBillCode + '"的款项申请退款').then(() => {
return applyRefund(row.id); return applyRefund(row.id);
}).then(() => { }).then(() => {
this.getList(); this.getList();
@ -467,8 +451,7 @@ export default {
}).catch(() => {}); }).catch(() => {});
}, },
handleRevoke(row) { handleRevoke(row) {
let msg=row.paymentBillType==='REFUND'?'是否将该笔采购-退款单撤销,将退款单撤销至付款单':'是否将该笔采购-付款单撤销,撤销至付款单未审批状态'; this.$modal.confirm('是否撤销对付款单编号为"' + row.paymentBillCode + '"的款项?').then(() => {
this.$modal.confirm(msg).then(() => {
return handleRevoke(row.id); return handleRevoke(row.id);
}).then(() => { }).then(() => {
this.getList(); this.getList();

View File

@ -3,23 +3,23 @@
<div class="dialog-body"> <div class="dialog-body">
<el-form ref="form" :model="queryParams" :inline="true" label-width="120px"> <el-form ref="form" :model="queryParams" :inline="true" label-width="120px">
<el-row> <el-row>
<!-- <el-col :span="8">--> <el-col :span="8">
<!-- <el-form-item label="收票单类型" prop="ticketBillType">--> <el-form-item label="收票单类型" prop="ticketBillType">
<!-- &lt;!&ndash; Mapping receiptBillType to ticketBillType for consistency with the merge logic &ndash;&gt;--> <!-- Mapping receiptBillType to ticketBillType for consistency with the merge logic -->
<!-- <el-select disabled v-model="form.receiptBillType" placeholder="请选择收票单类型" clearable>--> <el-select disabled v-model="form.receiptBillType" placeholder="请选择收票单类型" clearable>
<!-- &lt;!&ndash; Using dicts.receipt_bill_type if available, or dict.type.payment_bill_type if that was the intent.--> <!-- Using dicts.receipt_bill_type if available, or dict.type.payment_bill_type if that was the intent.
<!-- The original code used dicts.receipt_bill_type. I'll stick to that but ensure it's passed or available.--> The original code used dicts.receipt_bill_type. I'll stick to that but ensure it's passed or available.
<!-- The user instructions imply 'MergeReceiptDialog' logic which used payment_bill_type.--> The user instructions imply 'MergeReceiptDialog' logic which used payment_bill_type.
<!-- I will use the existing props 'dicts' &ndash;&gt;--> I will use the existing props 'dicts' -->
<!-- <el-option--> <el-option
<!-- v-for="dict in dict.type.payment_bill_type"--> v-for="dict in dict.type.payment_bill_type"
<!-- :key="dict.value"--> :key="dict.value"
<!-- :label="dict.label"--> :label="dict.label"
<!-- :value="dict.value"--> :value="dict.value"
<!-- />--> />
<!-- </el-select>--> </el-select>
<!-- </el-form-item>--> </el-form-item>
<!-- </el-col>--> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="制造商名称"> <el-form-item label="制造商名称">
<el-select <el-select
@ -39,10 +39,10 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="制造商开票时间" prop="vendorTicketTime"> <el-form-item label="厂家开票时间" prop="vendorTicketTime">
<el-date-picker <el-date-picker
v-model="form.vendorTicketTime" v-model="form.vendorTicketTime"
type="datetime" type="date"
value-format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss"
placeholder="选择日期" placeholder="选择日期"
></el-date-picker> ></el-date-picker>
@ -62,38 +62,31 @@
ref="table" ref="table"
> >
<el-table-column type="selection" :reserve-selection="true" width="55" align="center" /> <el-table-column type="selection" :reserve-selection="true" width="55" align="center" />
<el-table-column label="采购-应付单编号" align="center" prop="payableBillCode" width="150"/> <el-table-column label="应付单编号" align="center" prop="payableBillCode" width="150"/>
<el-table-column label="预计收票时间" align="center" prop="planTicketDate" width="180"/> <el-table-column label="预计收票时间" align="center" prop="planTicketDate" width="180"/>
<!-- <el-table-column label="收票计划" align="center" width="100" prop="planTicketAmount">--> <el-table-column label="收票计划" align="center" width="100" prop="planTicketAmount">
<!-- </el-table-column>--> </el-table-column>
<el-table-column label="预期收票计划" align="center" width="120"> <el-table-column label="项目名称" align="center" prop="projectName" width="150"/>
<el-table-column label="合同编号" align="center" prop="orderCode" width="150"/>
<el-table-column label="出入库单号" align="center" prop="inventoryCode" width="150"/>
<el-table-column label="收票状态" align="center" prop="invoiceStatus" width="120">
<template slot-scope="scope">
<dict-tag :options="dict.type.invoice_status" :value="scope.row.invoiceStatus"/>
</template>
</el-table-column>
<el-table-column label="含税总价" align="center" prop="totalPriceWithTax" width="120"/>
<el-table-column label="未收票金额" align="center" prop="unInvoicedAmount" width="120"/>
<el-table-column label="本次收票金额" align="center" width="120">
<template slot-scope="scope"> <template slot-scope="scope">
{{ calculateOrderCurrentTicketAmount(scope.row.id).toFixed(2) }} {{ calculateOrderCurrentTicketAmount(scope.row.id).toFixed(2) }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="预期收票比例" align="center" width="120"> <el-table-column label="本次收票比例" align="center" width="120">
<template slot-scope="scope"> <template slot-scope="scope">
{{ calculateOrderCurrentTicketRate(scope.row.id) }}% {{ calculateOrderCurrentTicketRate(scope.row.id) }}%
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="项目名称" align="center" prop="projectName" /> <el-table-column label="已收票金额" align="center" prop="invoicedAmount" width="120"/>
<el-table-column label="制造商名称" align="center" prop="vendorName" />
<!-- <el-table-column label="合同编号" align="center" prop="orderCode" width="150"/>-->
<!-- <el-table-column label="出入库单号" align="center" prop="inventoryCode" width="150"/>-->
<!-- <el-table-column label="收票状态" align="center" prop="invoiceStatus" width="120">-->
<!-- <template slot-scope="scope">-->
<!-- <dict-tag :options="dict.type.invoice_status" :value="scope.row.invoiceStatus"/>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column label="含税总价(元)" align="center" prop="totalPriceWithTax" width="120"/>
<el-table-column label="未收票金额(元)" align="center" prop="unInvoicedAmount" width="120"/>
<el-table-column label="已收票金额(元)" align="center" prop="invoicedAmount" width="120"/>
<el-table-column label="收票中金额(元)" align="center" prop="invoicedAmount" width="120">
<template slot-scope="scope">
{{ $calc.sub($calc.sub(scope.row.totalPriceWithTax,scope.row.receivedTicketAmount),scope.row.unreceivedTicketAmount)}}
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="100" fixed="right"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="100" fixed="right">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
@ -168,7 +161,6 @@ export default {
ticketBillType: 'FROM_PAYABLE', // Used for filtering if needed ticketBillType: 'FROM_PAYABLE', // Used for filtering if needed
vendorId: null, vendorId: null,
invoiceStatus: null, invoiceStatus: null,
unreceivedTicketAmount:-1
}, },
// Form data for submission // Form data for submission
form: { form: {
@ -240,7 +232,6 @@ export default {
ticketPlans.push({ ticketPlans.push({
id: order.lastTicketPlanId, id: order.lastTicketPlanId,
planAmount: order.planTicketAmount, planAmount: order.planTicketAmount,
taxRate: order.taxRate,
planTicketDate: order.planTicketDate, planTicketDate: order.planTicketDate,
planRate: order.totalPriceWithTax ? this.$calc.mul(this.$calc.div(order.planTicketAmount, order.totalPriceWithTax, 4), 100) : 0 planRate: order.totalPriceWithTax ? this.$calc.mul(this.$calc.div(order.planTicketAmount, order.totalPriceWithTax, 4), 100) : 0
}); });
@ -322,7 +313,7 @@ export default {
return; return;
} }
if (!this.form.vendorTicketTime) { if (!this.form.vendorTicketTime) {
this.$modal.msgError('请选择制造商开票时间'); this.$modal.msgError('请选择厂家开票时间');
return; return;
} }
@ -340,14 +331,14 @@ export default {
return; return;
} }
for (const plan of order.ticketPlans) { for (const plan of order.ticketPlans) {
if (plan.planAmount === null || plan.planAmount === undefined || plan.planAmount <= 0) {
this.$modal.msgError(`应付单 ${order.payableBillCode} 的收票计划中预计收票金额必须大于0。`);
return;
}
if (!plan.planTicketDate) { if (!plan.planTicketDate) {
this.$modal.msgError(`应付单 ${order.payableBillCode} 的收票计划中预计收票时间不能为空。`); this.$modal.msgError(`应付单 ${order.payableBillCode} 的收票计划中预计收票时间不能为空。`);
return; return;
} }
if (plan.planAmount === null || plan.planAmount === undefined || plan.planAmount <= 0) {
this.$modal.msgError(`应付单 ${order.payableBillCode} 的收票计划中预计收票金额必须大于0。`);
return;
}
} }
} }
@ -363,7 +354,6 @@ export default {
planTicketDate: plan.planTicketDate, planTicketDate: plan.planTicketDate,
planAmount: plan.planAmount, planAmount: plan.planAmount,
planRate: plan.planRate, planRate: plan.planRate,
taxRate: order.taxRate,
remark: plan.remark, remark: plan.remark,
id: plan.id, id: plan.id,
})), })),
@ -388,7 +378,6 @@ export default {
ticketBillType: 'FROM_PAYABLE', ticketBillType: 'FROM_PAYABLE',
vendorId: null, vendorId: null,
invoiceStatus: null, invoiceStatus: null,
unreceivedTicketAmount:-1
}; };
this.payableOrdersWithPlans = []; this.payableOrdersWithPlans = [];
this.selectedRows = []; this.selectedRows = [];

View File

@ -143,19 +143,19 @@
<span>{{ receiptData.totalPriceWithTax }}</span> <span>{{ receiptData.totalPriceWithTax }}</span>
</el-form-item> </el-form-item>
<el-form-item label="发票含税总价" prop="ticketPriceWithTax" required> <el-form-item label="发票含税总价" prop="ticketPriceWithTax" required>
<el-input v-model="uploadForm.ticketPriceWithTax" placeholder="请输入发票含税总价" @input="handlePriceWithTaxChange"></el-input> <el-input v-model="uploadForm.ticketPriceWithTax" placeholder="请输入发票含税总价"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="未税总价"> <el-form-item label="未税总价">
<span>{{ receiptData.totalPriceWithoutTax }}</span> <span>{{ receiptData.totalPriceWithoutTax }}</span>
</el-form-item> </el-form-item>
<el-form-item label="发票未税总价" prop="ticketPriceWithoutTax" required> <el-form-item label="发票未税总价" prop="ticketPriceWithoutTax" required>
<el-input v-model="uploadForm.ticketPriceWithoutTax" placeholder="请输入发票未税总价" @input="handlePriceWithoutTaxChange"></el-input> <el-input v-model="uploadForm.ticketPriceWithoutTax" placeholder="请输入发票未税总价"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="税额"> <el-form-item label="税额">
<span>{{ receiptData.taxAmount }}</span> <span>{{ receiptData.taxAmount }}</span>
</el-form-item> </el-form-item>
<el-form-item label="发票税额" prop="ticketAmount" required> <el-form-item label="发票税额" prop="ticketAmount" required>
<el-input v-model="uploadForm.ticketAmount" placeholder="请输入发票税额" @input="handleAmountChange"></el-input> <el-input v-model="uploadForm.ticketAmount" placeholder="请输入发票税额"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="备注"> <el-form-item label="备注">
<el-input <el-input
@ -210,10 +210,6 @@ export default {
dicts: { dicts: {
type: Object, type: Object,
default: () => ({}) default: () => ({})
},
autoUpload: {
type: Boolean,
default: false,
} }
}, },
dicts:['finance_invoice_type'], dicts:['finance_invoice_type'],
@ -224,51 +220,24 @@ export default {
// Upload Dialog Data // Upload Dialog Data
uploadDialogVisible: false, uploadDialogVisible: false,
uploadForm: { uploadForm: {
totalPriceWithTax: '',
ticketPriceWithTax: '', ticketPriceWithTax: '',
totalPriceWithoutTax: '',
ticketPriceWithoutTax: '', ticketPriceWithoutTax: '',
ticketAmount: '', taxAmount: '',
ticketType: '', ticketType: '',
remark: '', remark: '',
file: null file: null
}, },
rules: { rules: {
ticketPriceWithTax: [ ticketPriceWithTax: [
{ required: true, message: "请输入发票含税总价", trigger: "blur" }, { required: true, message: "请输入发票含税总价", trigger: "blur" }
{ validator: (rule, value, callback) => {
if (Number(value) !== Number(this.receiptData.totalPriceWithTax)) {
callback(new Error('发票含税总价必须等于含税总价'));
} else {
callback();
}
}, trigger: 'blur' }
], ],
ticketPriceWithoutTax: [ ticketPriceWithoutTax: [
{ required: true, message: "请输入发票未税总价", trigger: "blur" }, { required: true, message: "请输入发票未税总价", trigger: "blur" }
{ validator: (rule, value, callback) => {
const total = Number(this.receiptData.totalPriceWithTax);
const val = Number(value);
if (total > 0 && val < 0) {
callback(new Error('发票未税总价不能小于0'));
} else if (total < 0 && val > 0) {
callback(new Error('发票未税总价不能大于0'));
} else {
callback();
}
}, trigger: 'blur' }
], ],
ticketAmount: [ ticketAmount: [
{ required: true, message: "请输入发票税额", trigger: "blur" }, { required: true, message: "请输入发票税额", trigger: "blur" }
{ validator: (rule, value, callback) => {
const total = Number(this.receiptData.totalPriceWithTax);
const val = Number(value);
if (total > 0 && val < 0) {
callback(new Error('发票税额不能小于0'));
} else if (total < 0 && val > 0) {
callback(new Error('发票税额不能大于0'));
} else {
callback();
}
}, trigger: 'blur' }
] ]
}, },
previewUrl: '', previewUrl: '',
@ -307,11 +276,6 @@ export default {
visible(val) { visible(val) {
if (val && this.receiptData) { if (val && this.receiptData) {
this.fetchAttachments(); this.fetchAttachments();
if (this.autoUpload) {
setTimeout(() => {
this.openUploadDialog();
}, 300);
}
} }
}, },
}, },
@ -377,10 +341,9 @@ export default {
// New Upload Dialog Methods // New Upload Dialog Methods
openUploadDialog() { openUploadDialog() {
this.uploadForm = { this.uploadForm = {
ticketPriceWithTax: this.receiptData.totalPriceWithTax, totalPriceWithTax: '',
ticketPriceWithoutTax: this.receiptData.totalPriceWithoutTax, totalPriceWithoutTax: '',
ticketAmount: this.receiptData.taxAmount, taxAmount: '',
ticketType: '',
remark: '', remark: '',
file: null file: null
}; };
@ -391,21 +354,6 @@ export default {
this.isPreviewPdf = false; this.isPreviewPdf = false;
this.uploadDialogVisible = true; this.uploadDialogVisible = true;
}, },
handlePriceWithTaxChange(val) {
const withTax = Number(val) || 0;
const withoutTax = Number(this.uploadForm.ticketPriceWithoutTax) || 0;
this.uploadForm.ticketAmount = (withTax - withoutTax).toFixed(2);
},
handlePriceWithoutTaxChange(val) {
const withTax = Number(this.uploadForm.ticketPriceWithTax) || 0;
const withoutTax = Number(val) || 0;
this.uploadForm.ticketAmount = (withTax - withoutTax).toFixed(2);
},
handleAmountChange(val) {
const withTax = Number(this.uploadForm.ticketPriceWithTax) || 0;
const amount = Number(val) || 0;
this.uploadForm.ticketPriceWithoutTax = (withTax - amount).toFixed(2);
},
closeUploadDialog() { closeUploadDialog() {
this.uploadDialogVisible = false; this.uploadDialogVisible = false;
this.uploadForm.file = null; this.uploadForm.file = null;

View File

@ -1,6 +1,6 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="150px"> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="100px">
<el-form-item label="项目编号" prop="projectCode"> <el-form-item label="项目编号" prop="projectCode">
<el-input <el-input
v-model="queryParams.projectCode" v-model="queryParams.projectCode"
@ -17,9 +17,9 @@
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="采购-收票单编号" prop="ticketBillCode"> <el-form-item label="收票单编号" prop="receiptBillCode">
<el-input <el-input
v-model="queryParams.ticketBillCode" v-model="queryParams.receiptBillCode"
placeholder="请输入收票单编号" placeholder="请输入收票单编号"
clearable clearable
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
@ -33,7 +33,7 @@
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="采购-应付单编号" prop="payableBillCode"> <el-form-item label="应付单编号" prop="payableBillCode">
<el-input <el-input
v-model="queryParams.payableBillCode" v-model="queryParams.payableBillCode"
placeholder="请输入应付单编号" placeholder="请输入应付单编号"
@ -46,27 +46,20 @@
<el-option v-for="dict in dict.type.receipt_bill_type" :key="dict.value" :label="dict.label" :value="dict.value"></el-option> <el-option v-for="dict in dict.type.receipt_bill_type" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="收票状态" prop="receiptStatus">
<el-select v-model="queryParams.receiptStatus" placeholder="请选择收票状态" clearable>
<el-option
v-for="dict in dict.type.receipt_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="审批状态" prop="approveStatus"> <el-form-item label="审批状态" prop="approveStatus">
<el-select v-model="queryParams.approveStatus" placeholder="请选择审批状态" clearable> <el-select v-model="queryParams.approveStatus" placeholder="请选择审批状态" clearable>
<el-option <el-option label="待提交" value="0" />
v-for="dict in dict.type.approve_status" <el-option label="审批中" value="1" />
:key="dict.value" <el-option label="已审批" value="2" />
:label="dict.label" <el-option label="已驳回" value="3" />
:value="dict.value" </el-select>
/> </el-form-item>
<el-form-item label="收票状态" prop="receiptStatus">
<el-select v-model="queryParams.receiptStatus" placeholder="请选择收票状态" clearable>
<el-option label="待收票" value="0" />
<el-option label="已收票" value="1" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="审批节点" prop="approveNode"> <el-form-item label="审批节点" prop="approveNode">
<el-input <el-input
v-model="queryParams.approveNode" v-model="queryParams.approveNode"
@ -79,30 +72,30 @@
<el-date-picker <el-date-picker
v-model="dateRangeApproval" v-model="dateRangeApproval"
style="width: 240px" style="width: 240px"
value-format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd"
type="datetimerange" type="daterange"
range-separator="-" range-separator="-"
start-placeholder="开始日期" start-placeholder="开始日期"
end-placeholder="结束日期" end-placeholder="结束日期"
></el-date-picker> ></el-date-picker>
</el-form-item> </el-form-item>
<!-- <el-form-item label="预计收票时间">--> <el-form-item label="预计收票时间">
<!-- <el-date-picker-->
<!-- v-model="dateRangeEstimated"-->
<!-- style="width: 240px"-->
<!-- value-format="yyyy-MM-dd"-->
<!-- type="daterange"-->
<!-- range-separator="-"-->
<!-- start-placeholder="开始日期"-->
<!-- end-placeholder="结束日期"-->
<!-- ></el-date-picker>-->
<!-- </el-form-item>-->
<el-form-item label="制造商开票时间">
<el-date-picker <el-date-picker
v-model="dateRangeVendor" v-model="dateRangeEstimated"
style="width: 240px" style="width: 240px"
value-format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd"
type="datetimerange" type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
></el-date-picker>
</el-form-item>
<el-form-item label="实际收票时间">
<el-date-picker
v-model="dateRangeActual"
style="width: 240px"
value-format="yyyy-MM-dd"
type="daterange"
range-separator="-" range-separator="-"
start-placeholder="开始日期" start-placeholder="开始日期"
end-placeholder="结束日期" end-placeholder="结束日期"
@ -128,7 +121,7 @@
</el-row> </el-row>
<el-table v-loading="loading" :data="receiptList"> <el-table v-loading="loading" :data="receiptList">
<el-table-column label="采购-收票单编号" align="center" prop="ticketBillCode" /> <el-table-column label="收票单编号" align="center" prop="ticketBillCode" />
<!-- <el-table-column label="预计收票时间" align="center" prop="ticketTime" width="180">--> <!-- <el-table-column label="预计收票时间" align="center" prop="ticketTime" width="180">-->
<!-- <template slot-scope="scope">--> <!-- <template slot-scope="scope">-->
<!-- <span>{{ parseTime(scope.row.ticketTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>--> <!-- <span>{{ parseTime(scope.row.ticketTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>-->
@ -140,9 +133,9 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="制造商名称" align="center" prop="vendorName" /> <el-table-column label="制造商名称" align="center" prop="vendorName" />
<el-table-column label="含税总价(元)" align="center" prop="totalPriceWithTax" /> <el-table-column label="含税总价" align="center" prop="totalPriceWithTax" />
<el-table-column label="未税总价(元)" align="center" prop="totalPriceWithoutTax" /> <el-table-column label="未税总价" align="center" prop="totalPriceWithoutTax" />
<el-table-column label="税额(元)" align="center" prop="taxAmount" /> <el-table-column label="税额" align="center" prop="taxAmount" />
<!-- <el-table-column label="收票单类型" align="center" prop="ticketBillType" >--> <!-- <el-table-column label="收票单类型" align="center" prop="ticketBillType" >-->
<!-- <template slot-scope="scope">--> <!-- <template slot-scope="scope">-->
<!-- <dict-tag :options="dict.type.ticket_bill_type" :value="scope.row.ticketBillType"/>--> <!-- <dict-tag :options="dict.type.ticket_bill_type" :value="scope.row.ticketBillType"/>-->
@ -182,37 +175,22 @@
size="mini" size="mini"
type="text" type="text"
icon="el-icon-document" icon="el-icon-document"
v-show="scope.row.approveStatus!=='0'"
@click="handleReceipt(scope.row)" @click="handleReceipt(scope.row)"
>{{scope.row.ticketBillType==='FROM_PAYABLE'?'发票' : '红冲'}}</el-button> >发票</el-button>
<el-button <el-button
size="mini" size="mini"
type="text" type="text"
icon="el-icon-document" icon="el-icon-document"
v-show="scope.row.approveStatus==='0' && scope.row.ticketStatus==='1'" v-show="scope.row.approveStatus==='0'"
@click="handleReturn(scope.row)" @click="handleReturn(scope.row)"
>退回</el-button> >退回</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-document"
v-show="scope.row.approveStatus==='0' && scope.row.ticketStatus==='1'"
@click="handleApplyInvoice(scope.row)"
>申请发票</el-button>
<el-button <el-button
size="mini" size="mini"
type="text" type="text"
icon="el-icon-refresh-left" icon="el-icon-refresh-left"
v-show="scope.row.approveStatus=='2' && scope.row.ticketStatus==='2'" v-show="scope.row.approveStatus=='2'"
@click="handleApplyRedRush(scope.row)" @click="handleRedRush(scope.row)"
>申请红冲</el-button> >申请红冲</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-refresh-left"
v-show="scope.row.approveStatus=='3'"
@click="handleRevoke(scope.row)"
>撤销</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -230,13 +208,13 @@
<!-- 新增弹窗 --> <!-- 新增弹窗 -->
<add-form :visible.sync="addOpen" :dicts="dict.type" @submit="handleAddSubmit"></add-form> <add-form :visible.sync="addOpen" :dicts="dict.type" @submit="handleAddSubmit"></add-form>
<!-- 收票附件弹窗 --> <!-- 收票附件弹窗 -->
<receipt-dialog :visible.sync="receiptOpen" :receipt-data="currentRow" :dicts="dict.type" :auto-upload="autoUpload"></receipt-dialog> <receipt-dialog :visible.sync="receiptOpen" :receipt-data="currentRow" :dicts="dict.type"></receipt-dialog>
</div> </div>
</template> </template>
<script> <script>
import {listReceipt, getReceipt, redRush, addReceipt, returnReceipt, revokeReceipt} from "@/api/finance/receipt"; import {listReceipt, getReceipt, redRush, addReceipt, returnReceipt} from "@/api/finance/receipt";
import { addDateRange } from "@/utils/ruoyi"; import { addDateRange } from "@/utils/ruoyi";
import DetailDrawer from "./components/DetailDrawer.vue"; import DetailDrawer from "./components/DetailDrawer.vue";
import AddForm from "./components/AddForm.vue"; import AddForm from "./components/AddForm.vue";
@ -266,7 +244,7 @@ export default {
pageSize: 10, pageSize: 10,
projectCode: null, projectCode: null,
projectName: null, projectName: null,
ticketBillCode: null, receiptBillCode: null,
vendorCode: null, vendorCode: null,
payableBillCode: null, payableBillCode: null,
receiptBillType: null, receiptBillType: null,
@ -277,7 +255,7 @@ export default {
// //
dateRangeApproval: [], dateRangeApproval: [],
dateRangeEstimated: [], dateRangeEstimated: [],
dateRangeVendor: [], dateRangeActual: [],
// //
detailOpen: false, detailOpen: false,
detailData: null, detailData: null,
@ -285,8 +263,7 @@ export default {
addOpen: false, addOpen: false,
// //
receiptOpen: false, receiptOpen: false,
currentRow: {}, currentRow: {}
autoUpload: false
}; };
}, },
created() { created() {
@ -299,7 +276,7 @@ export default {
let query = { ...this.queryParams }; let query = { ...this.queryParams };
query = this.addDateRange(query, this.dateRangeApproval, 'ApproveTime'); query = this.addDateRange(query, this.dateRangeApproval, 'ApproveTime');
query = this.addDateRange(query, this.dateRangeEstimated, 'ReceiptTime'); query = this.addDateRange(query, this.dateRangeEstimated, 'ReceiptTime');
query = this.addDateRange(query, this.dateRangeVendor, 'VendorTicketTime'); query = this.addDateRange(query, this.dateRangeActual, 'ActualReceiptTime');
listReceipt(query).then(response => { listReceipt(query).then(response => {
this.receiptList = response.rows; this.receiptList = response.rows;
@ -316,7 +293,7 @@ export default {
resetQuery() { resetQuery() {
this.dateRangeApproval = []; this.dateRangeApproval = [];
this.dateRangeEstimated = []; this.dateRangeEstimated = [];
this.dateRangeVendor = []; this.dateRangeActual = [];
this.resetForm("queryForm"); this.resetForm("queryForm");
this.handleQuery(); this.handleQuery();
}, },
@ -347,36 +324,22 @@ export default {
handleReceipt(row) { handleReceipt(row) {
this.currentRow = row; this.currentRow = row;
this.receiptOpen = true; this.receiptOpen = true;
this.autoUpload = false;
},
handleApplyInvoice(row) {
this.currentRow = row;
this.receiptOpen = true;
this.autoUpload = true;
},
handleApplyRedRush(row) {
this.currentRow = row;
this.receiptOpen = true;
this.autoUpload = true;
}, },
/** 退回按钮操作 */ /** 退回按钮操作 */
handleReturn(row) { handleRedRush(row) {
this.$modal.confirm('是否将该笔采购-收票单退回至采购-应付单').then(function() { this.$modal.confirm('是否确认收票单编号为"' + row.ticketBillCode + '"的数据项进行红冲,并提交财务审批?').then(function() {
return returnReceipt(row.id); return redRush(row.id);
}).then(() => { }).then(() => {
this.getList(); this.getList();
this.$modal.msgSuccess("退回成功"); this.$modal.msgSuccess("退回成功");
}).catch(() => {}); }).catch(() => {});
}, },
handleRevoke(row) { handleReturn(row) {
const msg = row.ticketBillType === 'FROM_PAYABLE' this.$modal.confirm('是否确认退回收票单编号为"' + row.ticketBillCode + '"的数据项?').then(function() {
? '是否将该笔采购-收票单撤销,撤销后重新上传发票' return returnReceipt(row.id);
: '是否将该笔采购-红冲收票单撤销,将红冲收票单撤销至收票单';
this.$modal.confirm(msg).then(function() {
return revokeReceipt(row.id);
}).then(() => { }).then(() => {
this.getList(); this.getList();
this.$modal.msgSuccess("撤销成功"); this.$modal.msgSuccess("退回成功");
}).catch(() => {}); }).catch(() => {});
} }
} }

View File

@ -53,7 +53,7 @@ public class OmsPayableBillController extends BaseController
@RequiresPermissions("finance:payable:list") @RequiresPermissions("finance:payable:list")
@PostMapping("/list") @PostMapping("/list")
@ResponseBody @ResponseBody
public TableDataInfo list(OmsPayableBill omsPayableBill) public TableDataInfo list(@RequestBody OmsPayableBill omsPayableBill)
{ {
startPage(); startPage();
List<OmsPayableBill> list = omsPayableBillService.selectOmsPayableBillList(omsPayableBill); List<OmsPayableBill> list = omsPayableBillService.selectOmsPayableBillList(omsPayableBill);

View File

@ -138,7 +138,7 @@ public class OmsPaymentBillController extends BaseController
@ResponseBody @ResponseBody
public AjaxResult addSave(@RequestBody OmsPaymentBill omsPaymentBill) public AjaxResult addSave(@RequestBody OmsPaymentBill omsPaymentBill)
{ {
omsPaymentBill.setPreResidueAmount(null); omsPaymentBill.setPreResidueAmount(omsPaymentBill.getTotalPriceWithTax());
return toAjax(omsPaymentBillService.insertOmsPaymentBill(omsPaymentBill)); return toAjax(omsPaymentBillService.insertOmsPaymentBill(omsPaymentBill));
} }

View File

@ -44,7 +44,7 @@ private IOmsFinAttachmentService omsFinAttachmentService;
* *
*/ */
@RequiresPermissions("sip:ticketBill:list") @RequiresPermissions("sip:ticketBill:list")
@PostMapping("/list") @GetMapping("/list")
public TableDataInfo list(OmsTicketBill omsTicketBill) public TableDataInfo list(OmsTicketBill omsTicketBill)
{ {
startPage(); startPage();
@ -168,11 +168,11 @@ private IOmsFinAttachmentService omsFinAttachmentService;
/** /**
* *
*/ */
@PostMapping("/applyRefund") @GetMapping("/applyRefund/{id}")
@ResponseBody @ResponseBody
public AjaxResult applyRefund(@RequestParam("id")OmsTicketBill ticketBill, @RequestParam("file") MultipartFile file) { public AjaxResult applyRefund(@PathVariable("id") Long id) {
try { try {
return omsTicketBillService.applyRefund(ticketBill,file); return omsTicketBillService.applyRefund(id);
} catch (Exception e) { } catch (Exception e) {
logger.error("申请退款失败", e); logger.error("申请退款失败", e);
return AjaxResult.error("操作失败:" + e.getMessage()); return AjaxResult.error("操作失败:" + e.getMessage());
@ -196,26 +196,7 @@ private IOmsFinAttachmentService omsFinAttachmentService;
// 调用服务层方法处理退回逻辑 // 调用服务层方法处理退回逻辑
return omsTicketBillService.returnTicket(id); return omsTicketBillService.returnTicket(id);
} catch (Exception e) { } catch (Exception e) {
logger.error("退回收票单失败", e); logger.error("退回付款单失败", e);
return AjaxResult.error("操作失败:" + e.getMessage());
}
}
@RequiresPermissions("finance:payment:return")
@Log(title = "撤销", businessType = BusinessType.UPDATE)
@PutMapping("/revoke/{id}")
@ResponseBody
public AjaxResult revokeTicket(@PathVariable("id") Long id)
{
try {
// 验证付款单ID
if (id == null) {
return AjaxResult.error("收票ID不能为空");
}
// 调用服务层方法处理退回逻辑
return omsTicketBillService.revokeTicket(id);
} catch (Exception e) {
logger.error("撤销收票单失败", e);
return AjaxResult.error("操作失败:" + e.getMessage()); return AjaxResult.error("操作失败:" + e.getMessage());
} }
} }

View File

@ -101,7 +101,7 @@ public class VueProjectOrderInfoController extends BaseController {
boolean updateFlag = CollUtil.isNotEmpty(todoCompletedList) && ProjectOrderInfo.OrderStatus.WAIT_APPROVE.getCode().equals(projectOrderInfo.getOrderStatus()) ? boolean updateFlag = CollUtil.isNotEmpty(todoCompletedList) && ProjectOrderInfo.OrderStatus.WAIT_APPROVE.getCode().equals(projectOrderInfo.getOrderStatus()) ?
("产品经理".equals(todoCompletedList.get(0).getTaskName()) || "售前".equals(todoCompletedList.get(0).getTaskName())) ("产品经理".equals(todoCompletedList.get(0).getTaskName()) || "售前".equals(todoCompletedList.get(0).getTaskName()))
: (boolean) mmap.get("canUpdate"); : (boolean) mmap.get("canUpdate");
mmap.put("updateFile", (ShiroUtils.getSubject().hasRole("sale_assistant")||ShiroUtils.getSubject().hasRole("business")||ShiroUtils.getSubject().hasRole("marketing_promotion") ||ShiroUtils.getSysUser().isAdmin()) && updateFlag); mmap.put("updateFile", (ShiroUtils.getSubject().hasRole("sale_assistant")||ShiroUtils.getSubject().hasRole("business") ||ShiroUtils.getSysUser().isAdmin()) && updateFlag);
mmap.put("uploadFinalFile", (ShiroUtils.getSubject().hasRole("business") || ShiroUtils.getSysUser().isAdmin()) && mmap.put("uploadFinalFile", (ShiroUtils.getSubject().hasRole("business") || ShiroUtils.getSysUser().isAdmin()) &&
ProjectOrderInfo.OrderStatus.APPROVE_COMPLETE.getCode().equals(projectOrderInfo.getOrderStatus())); ProjectOrderInfo.OrderStatus.APPROVE_COMPLETE.getCode().equals(projectOrderInfo.getOrderStatus()));
mmap.put("todo", todoService.selectTodo(todo)); mmap.put("todo", todoService.selectTodo(todo));

View File

@ -170,7 +170,6 @@ public class OmsPaymentBill extends BaseEntity
WAIT_PAYMENT("1", "未付款"), WAIT_PAYMENT("1", "未付款"),
/** 预付单 */ /** 预付单 */
PAYMENT("2", "已付款"), PAYMENT("2", "已付款"),
WAIT_REFUNDED("3", "未退款"),

View File

@ -115,8 +115,6 @@ public class OmsTicketBill extends BaseEntity
private String processKey; private String processKey;
private String todoId; private String todoId;
private String taskId; private String taskId;
private String projectName;
private String projectCode;
public BigDecimal getTaxAmount() { public BigDecimal getTaxAmount() {
if (null != totalPriceWithTax && null != totalPriceWithoutTax){ if (null != totalPriceWithTax && null != totalPriceWithoutTax){
@ -159,7 +157,6 @@ public class OmsTicketBill extends BaseEntity
WAIT_TICKET("1", "未收票"), WAIT_TICKET("1", "未收票"),
/** 预付单 */ /** 预付单 */
TICKET("2", "已收票"), TICKET("2", "已收票"),
WAIT_RED_RUSH("3", "未红冲"),

View File

@ -17,12 +17,9 @@ public interface OmsPayablePaymentDetailMapper {
List<OmsPayablePaymentDetail> selectByPaymentPlanIds(@Param("paymentPlanIds") List<Long> paymentPlanIds); List<OmsPayablePaymentDetail> selectByPaymentPlanIds(@Param("paymentPlanIds") List<Long> paymentPlanIds);
int clearWriteOffByWriteOffId(Long[] ids); int clearWriteOffByWriteOffId(@Param("ids") Long[] ids);
List<PaymentBillPayableDetailDTO> listPayableByWriteOffId(List<Long> writeOffIds); List<PaymentBillPayableDetailDTO> listPayableByWriteOffId(List<Long> writeOffIds);
void updateBatch(List<OmsPayablePaymentDetail> updateList); void updateBatch(List<OmsPayablePaymentDetail> updateList);
void deleteByPaymentCode(String payableBillCode);
} }

View File

@ -77,5 +77,4 @@ public interface OmsPayableTicketDetailMapper
void updateBatch(List<OmsPayableTicketDetail> updateList); void updateBatch(List<OmsPayableTicketDetail> updateList);
void deleteByTicketBillCode(String ticketBillCode);
} }

View File

@ -70,6 +70,4 @@ public interface OmsTicketBillMapper
void updateReturnWriteOffBatch(List<OmsTicketBill> updateBills); void updateReturnWriteOffBatch(List<OmsTicketBill> updateBills);
void revokeTicket(OmsTicketBill updateBill);
} }

View File

@ -77,7 +77,7 @@ public interface IOmsFinAttachmentService
List<OmsFinAttachment> list(List<Long> ids, String type); List<OmsFinAttachment> list(List<Long> ids, String type);
void deleteOmsFinAttachment(List<Long> relatedIdList, String type); void deleteOmsFinAttachmentByPayment(List<Long> relatedIdList,String type);
void deleteOmsFinAttachmentByRelationId(Long id); void deleteOmsFinAttachmentByRelationId(Long id);

View File

@ -27,9 +27,6 @@ public interface IOmsPayablePaymentDetailService {
void updateBatch(List<OmsPayablePaymentDetail> updateList); void updateBatch(List<OmsPayablePaymentDetail> updateList);
void deleteByPaymentCode(String payableBillCode);
// List<OmsPayableWriteOffDetail> listWriteOffByPaymentCode(List<String> ); // List<OmsPayableWriteOffDetail> listWriteOffByPaymentCode(List<String> );
} }

View File

@ -82,6 +82,4 @@ public interface IOmsPayableTicketDetailService
void insertBatch(List<OmsPayableTicketDetail> detailList); void insertBatch(List<OmsPayableTicketDetail> detailList);
void updateBatch(List<OmsPayableTicketDetail> updateList); void updateBatch(List<OmsPayableTicketDetail> updateList);
void deleteByTicketBillCode(String ticketBillCode);
} }

View File

@ -65,7 +65,7 @@ public interface IOmsTicketBillService
AjaxResult uploadReceipt(OmsTicketBill attachment, MultipartFile file) throws Exception; AjaxResult uploadReceipt(OmsTicketBill attachment, MultipartFile file) throws Exception;
AjaxResult applyRefund(OmsTicketBill ticketBill, MultipartFile file); AjaxResult applyRefund(Long id);
AjaxResult returnTicket(Long id); AjaxResult returnTicket(Long id);
@ -76,7 +76,4 @@ public interface IOmsTicketBillService
OmsTicketBill selectOmsTicketBillByCode(String ticketBillCode); OmsTicketBill selectOmsTicketBillByCode(String ticketBillCode);
void returnTicketWriteOff(List<String> collect, List<OmsPayableTicketDetail> omsPayableTicketDetails); void returnTicketWriteOff(List<String> collect, List<OmsPayableTicketDetail> omsPayableTicketDetails);
AjaxResult revokeTicket(Long id);
} }

View File

@ -55,7 +55,7 @@ public class OmsFinAttachmentServiceImpl implements IOmsFinAttachmentService
} }
@Override @Override
public void deleteOmsFinAttachment(List<Long> relatedIdList, String type) { public void deleteOmsFinAttachmentByPayment(List<Long> relatedIdList,String type) {
omsFinAttachmentMapper.deleteOmsFinAttachmentByPayment(relatedIdList,type); omsFinAttachmentMapper.deleteOmsFinAttachmentByPayment(relatedIdList,type);
} }

View File

@ -510,7 +510,7 @@ public class OmsInvoiceBillServiceImpl implements IOmsInvoiceBillService, TodoCo
} }
if (CollUtil.isNotEmpty(updateBills)) { if (CollUtil.isNotEmpty(updateBills)) {
omsInvoiceBillMapper.updateReturnWriteOffBatch(updateBills); omsInvoiceBillMapper.updateReturnWriteOffBatch(updateBills);
omsFinAttachmentService.deleteOmsFinAttachment(updateBills.stream().map(OmsInvoiceBill::getId).collect(Collectors.toList()), omsFinAttachmentService.deleteOmsFinAttachmentByPayment(updateBills.stream().map(OmsInvoiceBill::getId).collect(Collectors.toList()),
OmsFinAttachment.RelatedBillTypeEnum.RECEIVE_INVOICE.getCode()); OmsFinAttachment.RelatedBillTypeEnum.RECEIVE_INVOICE.getCode());
} }
//清理detail数据 //清理detail数据

View File

@ -212,10 +212,8 @@ public class OmsPayableBillServiceImpl implements IOmsPayableBillService {
return 0; return 0;
} }
// Fetch bills once // Fetch bills once
Date minPaymentDate = DateUtils.getNowDate();
for (PayableOrderDto order : dto.getPayableOrders()) { for (PayableOrderDto order : dto.getPayableOrders()) {
for (OmsPayablePaymentPlan plan : order.getPaymentPlans()) { for (OmsPayablePaymentPlan plan : order.getPaymentPlans()) {
minPaymentDate = minPaymentDate.after(plan.getPlanPaymentDate()) ? plan.getPlanPaymentDate() : minPaymentDate;
// 计算每个 plan 的未税金额 = planAmount / (1 + 税率),保留两位小数 // 计算每个 plan 的未税金额 = planAmount / (1 + 税率),保留两位小数
BigDecimal taxRate = order.getTaxRate(); BigDecimal taxRate = order.getTaxRate();
if (taxRate == null || taxRate.compareTo(BigDecimal.ZERO) < 0) { if (taxRate == null || taxRate.compareTo(BigDecimal.ZERO) < 0) {
@ -234,7 +232,7 @@ public class OmsPayableBillServiceImpl implements IOmsPayableBillService {
OmsPayableBill firstPayableBill = omsPayableBillMapper.selectOmsPayableBillById(dto.getPayableOrders().get(0).getId()); OmsPayableBill firstPayableBill = omsPayableBillMapper.selectOmsPayableBillById(dto.getPayableOrders().get(0).getId());
paymentBill.setPaymentBillType(dto.getPaymentBillType()); paymentBill.setPaymentBillType(dto.getPaymentBillType());
paymentBill.setVendorCode(firstPayableBill.getVendorCode()); paymentBill.setVendorCode(firstPayableBill.getVendorCode());
paymentBill.setPaymentTime(dto.getEstimatedPaymentTime()==null?minPaymentDate:dto.getEstimatedPaymentTime()); paymentBill.setPaymentTime(dto.getEstimatedPaymentTime());
paymentBill.setTotalPriceWithTax(dto.getTotalMergePaymentAmount()); paymentBill.setTotalPriceWithTax(dto.getTotalMergePaymentAmount());
// Set Calculated Tax Info // Set Calculated Tax Info
@ -268,11 +266,6 @@ public class OmsPayableBillServiceImpl implements IOmsPayableBillService {
// 遍历所有计划并检查是否有已付款的记录 // 遍历所有计划并检查是否有已付款的记录
for (PayableOrderDto payableOrderDto : dto.getPayableOrders()) { for (PayableOrderDto payableOrderDto : dto.getPayableOrders()) {
BigDecimal taxRate = payableOrderDto.getTaxRate();
if (taxRate == null || taxRate.compareTo(BigDecimal.ZERO) < 0) {
// 如果税率为空或小于0则默认为0
taxRate = new BigDecimal(defaultTax);
}
for (OmsPayablePaymentPlan paymentPlanDto : payableOrderDto.getPaymentPlans()) { for (OmsPayablePaymentPlan paymentPlanDto : payableOrderDto.getPaymentPlans()) {
// 检查是否存在已付款的记录 // 检查是否存在已付款的记录
OmsPayablePaymentDetail existingDetail = existingDetailsMap.get(paymentPlanDto.getId()); OmsPayablePaymentDetail existingDetail = existingDetailsMap.get(paymentPlanDto.getId());
@ -288,7 +281,7 @@ public class OmsPayableBillServiceImpl implements IOmsPayableBillService {
detail.setPaymentPlanId(paymentPlanDto.getId()); detail.setPaymentPlanId(paymentPlanDto.getId());
detail.setPaymentBillCode(paymentBill.getPaymentBillCode()); detail.setPaymentBillCode(paymentBill.getPaymentBillCode());
detail.setPaymentAmount(paymentPlanDto.getPlanAmount()); detail.setPaymentAmount(paymentPlanDto.getPlanAmount());
detail.setPaymentAmountWithoutTax(paymentPlanDto.getPlanAmount().divide(BigDecimal.ONE.add(taxRate), 2, java.math.RoundingMode.HALF_UP)); detail.setPaymentAmountWithoutTax(paymentPlanDto.getPlanAmount().divide(BigDecimal.ONE.add(paymentPlanDto.getPlanRate()), 2, java.math.RoundingMode.HALF_UP));
detail.setPaymentAmountTax(detail.getPaymentAmount().subtract(detail.getPaymentAmountWithoutTax())); detail.setPaymentAmountTax(detail.getPaymentAmount().subtract(detail.getPaymentAmountWithoutTax()));
detail.setPaymentRate(paymentPlanDto.getPlanRate()); detail.setPaymentRate(paymentPlanDto.getPlanRate());
detail.setPaymentTime(paymentPlanDto.getPlanPaymentDate()); detail.setPaymentTime(paymentPlanDto.getPlanPaymentDate());
@ -318,12 +311,11 @@ public class OmsPayableBillServiceImpl implements IOmsPayableBillService {
} }
Date minTicketDate = DateUtils.getNowDate();
// Fetch bills once // Fetch bills once
for (PayableOrderReceiptDto order : dto.getPayableOrders()) { for (PayableOrderReceiptDto order : dto.getPayableOrders()) {
for (OmsPayableTicketPlan plan : order.getTicketPlans()) { for (OmsPayableTicketPlan plan : order.getTicketPlans()) {
minTicketDate = minTicketDate.after(plan.getPlanTicketDate()) ? plan.getPlanTicketDate() : minTicketDate;
// 计算每个 plan 的未税金额 = planAmount / (1 + 税率),保留两位小数 // 计算每个 plan 的未税金额 = planAmount / (1 + 税率),保留两位小数
BigDecimal taxRate = order.getTaxRate(); BigDecimal taxRate = order.getTaxRate();
if (taxRate == null || taxRate.compareTo(BigDecimal.ZERO) < 0) { if (taxRate == null || taxRate.compareTo(BigDecimal.ZERO) < 0) {
@ -340,12 +332,11 @@ public class OmsPayableBillServiceImpl implements IOmsPayableBillService {
// 2. 创建收票单 // 2. 创建收票单
OmsTicketBill ticketBill = new OmsTicketBill(); OmsTicketBill ticketBill = new OmsTicketBill();
OmsPayableBill firstPayableBill = omsPayableBillMapper.selectOmsPayableBillById(dto.getPayableOrders().get(0).getId()); OmsPayableBill firstPayableBill = omsPayableBillMapper.selectOmsPayableBillById(dto.getPayableOrders().get(0).getId());
ticketBill.setTicketBillType(dto.getTicketBillType()); ticketBill.setTicketBillType(dto.getTicketBillType());
ticketBill.setVendorTicketTime(dto.getVendorTicketTime()); ticketBill.setVendorTicketTime(dto.getVendorTicketTime());
ticketBill.setVendorCode(firstPayableBill.getVendorCode()); ticketBill.setVendorCode(firstPayableBill.getVendorCode());
ticketBill.setVendorName(firstPayableBill.getVendorName()); ticketBill.setVendorName(firstPayableBill.getVendorName());
ticketBill.setTicketTime(dto.getTicketTime()==null?minTicketDate:dto.getTicketTime()); ticketBill.setTicketTime(dto.getTicketTime());
ticketBill.setTotalPriceWithTax(dto.getTotalMergeTicketAmount()); ticketBill.setTotalPriceWithTax(dto.getTotalMergeTicketAmount());
// Set Calculated Tax Info // Set Calculated Tax Info
@ -471,10 +462,6 @@ public class OmsPayableBillServiceImpl implements IOmsPayableBillService {
.subtract(paidAmount) .subtract(paidAmount)
.subtract(waitPayAmount) .subtract(waitPayAmount)
); );
}else{
payableBill.setPaidPaymentAmount(BigDecimal.ZERO);
payableBill.setUnpaidPaymentAmount(payableBill.getTotalPriceWithTax() );
} }
// 5. 获取首个未支付计划 // 5. 获取首个未支付计划
@ -535,17 +522,13 @@ public class OmsPayableBillServiceImpl implements IOmsPayableBillService {
amountMap.getOrDefault( amountMap.getOrDefault(
OmsTicketBill.TicketStatusEnum.WAIT_TICKET.getCode(), BigDecimal.ZERO); OmsTicketBill.TicketStatusEnum.WAIT_TICKET.getCode(), BigDecimal.ZERO);
payableBill.setReceivedTicketAmount(paidAmount); payableBill.setPaidPaymentAmount(paidAmount);
payableBill.setUnreceivedTicketAmount( payableBill.setUnpaidPaymentAmount(
payableBill.getTotalPriceWithTax() payableBill.getTotalPriceWithTax()
.subtract(paidAmount) .subtract(paidAmount)
.subtract(waitPayAmount) .subtract(waitPayAmount)
); );
}else{
payableBill.setUnreceivedTicketAmount( payableBill.getTotalPriceWithTax());
payableBill.setReceivedTicketAmount(BigDecimal.ZERO);
} }
OmsPayableTicketPlan omsPayableTicketPlan = omsPayableTicketPlanMapper.firstUnPayPlan(payableBill.getId()); OmsPayableTicketPlan omsPayableTicketPlan = omsPayableTicketPlanMapper.firstUnPayPlan(payableBill.getId());
payableBill.setLastTicketPlanId(omsPayableTicketPlan == null ? -1 : omsPayableTicketPlan.getId()); payableBill.setLastTicketPlanId(omsPayableTicketPlan == null ? -1 : omsPayableTicketPlan.getId());

View File

@ -153,9 +153,4 @@ public class OmsPayablePaymentDetailServiceImpl implements IOmsPayablePaymentDet
public void updateBatch(List<OmsPayablePaymentDetail> updateList) { public void updateBatch(List<OmsPayablePaymentDetail> updateList) {
omsPayablePaymentDetailMapper.updateBatch(updateList); omsPayablePaymentDetailMapper.updateBatch(updateList);
} }
@Override
public void deleteByPaymentCode(String payableBillCode) {
omsPayablePaymentDetailMapper.deleteByPaymentCode(payableBillCode);
}
} }

View File

@ -123,7 +123,7 @@ public class OmsPayablePaymentPlanServiceImpl implements IOmsPayablePaymentPlanS
} }
} }
if (!found) { if (!found) {
throw new ServiceException("温馨提示:该操作无法完成,因为付款计划与开票计划中的累计金额信息已存在差异,系统无法在数据不一致的情况下建立关联。"); throw new ServiceException("因付款计划表与开票计划表中已付款/开票数据已不一致,所以无法关联开票计划");
} }
} }

View File

@ -215,9 +215,4 @@ public class OmsPayableTicketDetailServiceImpl implements IOmsPayableTicketDetai
public void updateBatch(List<OmsPayableTicketDetail> updateList) { public void updateBatch(List<OmsPayableTicketDetail> updateList) {
omsPayableTicketDetailMapper.updateBatch(updateList); omsPayableTicketDetailMapper.updateBatch(updateList);
} }
@Override
public void deleteByTicketBillCode(String ticketBillCode) {
omsPayableTicketDetailMapper.deleteByTicketBillCode(ticketBillCode);
}
} }

View File

@ -107,9 +107,6 @@ public class OmsPaymentBillServiceImpl implements IOmsPaymentBillService , TodoC
omsPaymentBill.setApproveStatus(ApproveStatusEnum.WAIT_COMMIT.getCode()); omsPaymentBill.setApproveStatus(ApproveStatusEnum.WAIT_COMMIT.getCode());
omsPaymentBill.setPaymentBillCode(generatePaymentBillCode()); omsPaymentBill.setPaymentBillCode(generatePaymentBillCode());
omsPaymentBill.setCreateTime(DateUtils.getNowDate()); omsPaymentBill.setCreateTime(DateUtils.getNowDate());
if (omsPaymentBill.getPaymentTime() == null) {
omsPaymentBill.setPaymentTime(DateUtils.getNowDate());
}
return omsPaymentBillMapper.insertOmsPaymentBill(omsPaymentBill); return omsPaymentBillMapper.insertOmsPaymentBill(omsPaymentBill);
} }
@ -465,24 +462,8 @@ public class OmsPaymentBillServiceImpl implements IOmsPaymentBillService , TodoC
@Override @Override
public AjaxResult revoke(OmsPaymentBill paymentBill) { public AjaxResult revoke(OmsPaymentBill paymentBill) {
OmsPaymentBill existBill = selectOmsPaymentBillById(paymentBill.getId());
if (existBill == null){
return AjaxResult.error("付款单不存在,请刷新后重试");
}
if (OmsPaymentBill.PaymentBillTypeEnum.REFUND.getCode().equals(existBill.getPaymentBillType())){
// 撤销退款单
deleteOmsPaymentBillById(existBill.getId());
detailService.deleteByPaymentCode(existBill.getPayableBillCode());
OmsPaymentBill omsPaymentBill = new OmsPaymentBill();
omsPaymentBill.setId(existBill.getOriginalBillId());
omsPaymentBill.setRefundStatus(OmsPaymentBill.RefundStatusEnum.WAIT_REFUNDED.getCode());
updateOmsPaymentBill(omsPaymentBill);
}else{
// 撤销付款单
paymentBill.setApproveStatus(ApproveStatusEnum.WAIT_COMMIT.getCode()); paymentBill.setApproveStatus(ApproveStatusEnum.WAIT_COMMIT.getCode());
omsPaymentBillMapper.revoke(paymentBill); omsPaymentBillMapper.revoke(paymentBill);
}
return AjaxResult.success("撤销成功"); return AjaxResult.success("撤销成功");
} }
@ -606,7 +587,7 @@ public class OmsPaymentBillServiceImpl implements IOmsPaymentBillService , TodoC
} }
if (CollUtil.isNotEmpty(updateBills)) { if (CollUtil.isNotEmpty(updateBills)) {
omsPaymentBillMapper.updateReturnWriteOffBatch(updateBills); omsPaymentBillMapper.updateReturnWriteOffBatch(updateBills);
omsFinAttachmentService.deleteOmsFinAttachment(updateBills.stream().map(OmsPaymentBill::getId).collect(Collectors.toList()), OmsFinAttachment.RelatedBillTypeEnum.PAYMENT.getCode()); omsFinAttachmentService.deleteOmsFinAttachmentByPayment(updateBills.stream().map(OmsPaymentBill::getId).collect(Collectors.toList()), OmsFinAttachment.RelatedBillTypeEnum.PAYMENT.getCode());
} }
} }

View File

@ -3,6 +3,7 @@ package com.ruoyi.sip.service.impl;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.common.config.RuoYiConfig; import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.entity.SysUser;
@ -12,6 +13,7 @@ import com.ruoyi.common.utils.ShiroUtils;
import com.ruoyi.common.utils.file.FileUploadUtils; import com.ruoyi.common.utils.file.FileUploadUtils;
import com.ruoyi.sip.domain.*; import com.ruoyi.sip.domain.*;
import com.ruoyi.sip.domain.dto.ReceiptDetailDTO; import com.ruoyi.sip.domain.dto.ReceiptDetailDTO;
import com.ruoyi.sip.dto.WriteOffRequestDto;
import com.ruoyi.sip.mapper.OmsReceiptBillMapper; import com.ruoyi.sip.mapper.OmsReceiptBillMapper;
import com.ruoyi.sip.service.*; import com.ruoyi.sip.service.*;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -389,7 +391,7 @@ public class OmsReceiptBillServiceImpl implements IOmsReceiptBillService {
} }
if (CollUtil.isNotEmpty(updateBills)) { if (CollUtil.isNotEmpty(updateBills)) {
omsReceiptBillMapper.updateReturnWriteOffBatch(updateBills); omsReceiptBillMapper.updateReturnWriteOffBatch(updateBills);
attachmentService.deleteOmsFinAttachment(updateBills.stream().map(OmsReceiptBill::getId).collect(Collectors.toList()), OmsFinAttachment.RelatedBillTypeEnum.PAYMENT.getCode()); attachmentService.deleteOmsFinAttachmentByPayment(updateBills.stream().map(OmsReceiptBill::getId).collect(Collectors.toList()), OmsFinAttachment.RelatedBillTypeEnum.PAYMENT.getCode());
} }
omsReceivableReceiptDetailService.clearWriteOffByWriteOffId(writeOffIdList); omsReceivableReceiptDetailService.clearWriteOffByWriteOffId(writeOffIdList);
} }

View File

@ -1,5 +1,6 @@
package com.ruoyi.sip.service.impl; package com.ruoyi.sip.service.impl;
import java.math.BigDecimal;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -210,9 +211,9 @@ public class OmsTicketBillServiceImpl implements IOmsTicketBillService, TodoComm
} }
@Override @Override
public AjaxResult applyRefund(OmsTicketBill ticketBill, MultipartFile file) { public AjaxResult applyRefund(Long originalId) {
// 1. 验证原始付款单 // 1. 验证原始付款单
OmsTicketBill originalBill = selectOmsTicketBillById(ticketBill.getOriginalBillId()); OmsTicketBill originalBill = selectOmsTicketBillById(originalId);
if (originalBill == null) { if (originalBill == null) {
return AjaxResult.error("原始付款单不存在"); return AjaxResult.error("原始付款单不存在");
} }
@ -240,10 +241,7 @@ public class OmsTicketBillServiceImpl implements IOmsTicketBillService, TodoComm
refundBill.setTicketBillType(OmsTicketBill.TicketBillTypeEnum.RED_RUSH.getCode()); refundBill.setTicketBillType(OmsTicketBill.TicketBillTypeEnum.RED_RUSH.getCode());
refundBill.setTicketStatus(OmsTicketBill.TicketStatusEnum.TICKET.getCode()); refundBill.setTicketStatus(OmsTicketBill.TicketStatusEnum.TICKET.getCode());
refundBill.setRefundStatus(OmsTicketBill.RefundStatusEnum.REFUNDED.getCode()); refundBill.setRefundStatus(OmsTicketBill.RefundStatusEnum.REFUNDED.getCode());
refundBill.setApproveStatus(ApproveStatusEnum.WAIT_APPROVE.getCode()); refundBill.setApproveStatus(ApproveStatusEnum.WAIT_COMMIT.getCode());
refundBill.setTicketPriceWithoutTax(ticketBill.getTicketPriceWithoutTax());
refundBill.setTicketPriceWithTax(ticketBill.getTicketPriceWithTax());
refundBill.setTicketAmount(ticketBill.getTaxAmount());
refundBill.setOriginalBillId(originalBill.getId()); refundBill.setOriginalBillId(originalBill.getId());
refundBill.setActualTicketTime(null); refundBill.setActualTicketTime(null);
refundBill.setApproveTime(null); refundBill.setApproveTime(null);
@ -258,13 +256,6 @@ public class OmsTicketBillServiceImpl implements IOmsTicketBillService, TodoComm
//4 创建付款明细 //4 创建付款明细
payableTicketDetailService.applyRefund(originalBill.getTicketBillCode(),refundBill.getTicketBillCode()); payableTicketDetailService.applyRefund(originalBill.getTicketBillCode(),refundBill.getTicketBillCode());
//上传文件 再开启流程
try {
omsFinAttachmentService.uploadAttachment(file, refundBill.getId(), OmsFinAttachment.RelatedBillTypeEnum.INVOICE);
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
return AjaxResult.success("退款申请已提交,新的退款单号为:" + refundBill.getTicketBillCode()); return AjaxResult.success("退款申请已提交,新的退款单号为:" + refundBill.getTicketBillCode());
} }
@ -390,41 +381,13 @@ public class OmsTicketBillServiceImpl implements IOmsTicketBillService, TodoComm
} }
if (CollUtil.isNotEmpty(updateBills)) { if (CollUtil.isNotEmpty(updateBills)) {
omsTicketBillMapper.updateReturnWriteOffBatch(updateBills); omsTicketBillMapper.updateReturnWriteOffBatch(updateBills);
omsFinAttachmentService.deleteOmsFinAttachment(updateBills.stream().map(OmsTicketBill::getId).collect(Collectors.toList()), omsFinAttachmentService.deleteOmsFinAttachmentByPayment(updateBills.stream().map(OmsTicketBill::getId).collect(Collectors.toList()),
OmsFinAttachment.RelatedBillTypeEnum.INVOICE.getCode()); OmsFinAttachment.RelatedBillTypeEnum.INVOICE.getCode());
} }
} }
} }
@Override
public AjaxResult revokeTicket(Long id) {
OmsTicketBill existBill = selectOmsTicketBillById(id);
if (!existBill.getApproveStatus().equals(ApproveStatusEnum.APPROVE_REJECT.getCode())) {
return AjaxResult.error("退回收票单操作失败:该收票单不处于审批驳回状态");
}
if (existBill.getTicketBillType().equals(OmsTicketBill.TicketBillTypeEnum.FROM_PAYABLE.getCode())) {
//1:修改状态
OmsTicketBill updateBill = new OmsTicketBill();
updateBill.setApproveStatus(ApproveStatusEnum.WAIT_COMMIT.getCode());
updateBill.setId(existBill.getId());
omsTicketBillMapper.revokeTicket(updateBill);
//2:删除对应的文件
omsFinAttachmentService.deleteOmsFinAttachment(Collections.singletonList(existBill.getId()), OmsFinAttachment.RelatedBillTypeEnum.INVOICE.getCode());
} else {
//红冲撤销
deleteOmsTicketBillById(id);
payableTicketDetailService.deleteByTicketBillCode(existBill.getTicketBillCode());
OmsTicketBill ticketBill = new OmsTicketBill();
ticketBill.setId(existBill.getOriginalBillId());
ticketBill.setRefundStatus(OmsTicketBill.RefundStatusEnum.WAIT_REFUNDED.getCode());
updateOmsTicketBill(ticketBill);
}
return null;
}
@Override @Override
public Object todoDetail(String businessKey, String processKey, String todoId) { public Object todoDetail(String businessKey, String processKey, String todoId) {

View File

@ -119,7 +119,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="unpaidPaymentAmount != null "> <if test="unpaidPaymentAmount != null ">
<choose> <choose>
<when test="unpaidPaymentAmount==-1"> <when test="unpaidPaymentAmount==-1">
and t1.unpaid_payment_amount > 0 and t1.unpaid_payment_amount != 0
</when> </when>
<otherwise> <otherwise>
@ -131,7 +131,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="unreceivedTicketAmount != null "> <if test="unreceivedTicketAmount != null ">
<choose> <choose>
<when test="unreceivedTicketAmount==-1"> <when test="unreceivedTicketAmount==-1">
and t1.unreceived_ticket_amount > 0 and t1.unreceived_ticket_amount != 0
</when> </when>
<otherwise> <otherwise>
@ -158,16 +158,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</choose> </choose>
</if> </if>
<if test="estimatedPaymentTimeStart != null or estimatedPaymentTimeEnd != null"> <if test="planPaymentDateStart != null or planPaymentDateEnd != null">
<choose> <choose>
<when test="estimatedPaymentTimeStart != null and estimatedPaymentTimeEnd != null"> <when test="planPaymentDateStart != null and planPaymentDateEnd != null">
and ppp.plan_payment_date between #{estimatedPaymentTimeStart} and #{estimatedPaymentTimeEnd} and ppp.plan_payment_date between date_format(#{planPaymentDateStart}, '%Y-%m-%d 00:00:00') and
date_format(#{planPaymentDateEnd}, '%Y-%m-%d 23:59:59')
</when> </when>
<when test="estimatedPaymentTimeStart != null"> <when test="planPaymentDateStart != null">
and ppp.plan_payment_date <![CDATA[ >= ]]> #{estimatedPaymentTimeStart} and ppp.plan_payment_date <![CDATA[ >= ]]> date_format(#{planPaymentDateStart}, '%Y-%m-%d
00:00:00')
</when> </when>
<when test="estimatedPaymentTimeEnd != null"> <when test="planPaymentDateEnd != null">
and ppp.plan_payment_date <![CDATA[ <= ]]> #{estimatedPaymentTimeEnd} and ppp.plan_payment_date <![CDATA[ <= ]]> date_format(#{planPaymentDateEnd}, '%Y-%m-%d
23:59:59')
</when> </when>
</choose> </choose>
</if> </if>

View File

@ -75,9 +75,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where id = #{item.id} where id = #{item.id}
</foreach> </foreach>
</update> </update>
<delete id="deleteByPaymentCode">
delete from oms_payable_payment_detail where payment_bill_code = #{paymentBillCode}
</delete>
<select id="list" resultType="com.ruoyi.sip.domain.OmsPayablePaymentDetail"> <select id="list" resultType="com.ruoyi.sip.domain.OmsPayablePaymentDetail">
SELECT SELECT
@ -125,9 +122,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
select t1.payment_amount, t2.payable_bill_code, t4.project_name, t4.project_code, t2.total_price_with_tax select t1.payment_amount, t2.payable_bill_code, t4.project_name, t4.project_code, t2.total_price_with_tax
from (SELECT sum(payment_amount) payment_amount, from (SELECT sum(payment_amount) payment_amount,
payable_bill_id payable_bill_id
FROM oms_payable_payment_detail t1 FROM oms_payable_payment_detail
left join oms_payable_write_off t2 on t1.write_off_id=t2.id WHERE write_off_id is null and payment_bill_code in
WHERE (t1.write_off_id is null or t1.payment_bill_code=t2.payment_bill_code) and t1.payment_bill_code in
<foreach item="item" collection="list" separator="," open="(" close=")" index=""> <foreach item="item" collection="list" separator="," open="(" close=")" index="">
#{item} #{item}
</foreach> </foreach>

View File

@ -125,10 +125,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="paymentTime != null ">and date_format(pb.payment_time,'%Y-%m-%d') = <if test="paymentTime != null ">and date_format(pb.payment_time,'%Y-%m-%d') =
date_format(#{paymentTime},'%Y-%m-%d') date_format(#{paymentTime},'%Y-%m-%d')
</if> </if>
<if test="vendorCode != null and vendorCode != ''">and pb.vendor_code = #{vendorCode} <if test="vendorCode != null and vendorCode != ''">and pb.vendor_code like concat('%', #{vendorCode},
</if> '%')
<if test="vendorName != null and vendorName != ''">
and ovi.vendor_name like concat('%', #{vendorName}, '%')
</if> </if>
<if test="orderCode != null and orderCode != ''">and pb.order_code like concat('%', #{orderCode}, '%')</if> <if test="orderCode != null and orderCode != ''">and pb.order_code like concat('%', #{orderCode}, '%')</if>
<if test="totalPriceWithTax != null ">and pb.total_price_with_tax = #{totalPriceWithTax}</if> <if test="totalPriceWithTax != null ">and pb.total_price_with_tax = #{totalPriceWithTax}</if>
@ -146,63 +144,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="approveTime != null ">and date_format(pb.approve_time,'%Y-%m-%d') = <if test="approveTime != null ">and date_format(pb.approve_time,'%Y-%m-%d') =
date_format(#{approveTime},'%Y-%m-%d') date_format(#{approveTime},'%Y-%m-%d')
</if> </if>
<if test="(params.beginApproveTime != null and params.beginApproveTime != '') or (params.endApproveTime != null and params.endApproveTime!='')">
<choose>
<when test="(params.beginApproveTime != null and params.beginApproveTime != '') and (params.endApproveTime != null and params.endApproveTime!='')">
and pb.approve_time between #{params.beginApproveTime} and #{params.endApproveTime}
</when>
<when test="(params.beginApproveTime != null and params.beginApproveTime != '')">
and pb.approve_time <![CDATA[ >= ]]> #{params.beginApproveTime}
</when>
<when test="(params.endApproveTime != null and params.endApproveTime!='')">
and pb.approve_time <![CDATA[ <= ]]> #{params.endApproveTime}
</when>
</choose>
</if>
<if test="(params.beginPaymentTime != null and params.beginPaymentTime != '') or (params.endPaymentTime != null and params.endPaymentTime!='')">
<choose>
<when test="(params.beginPaymentTime != null and params.beginPaymentTime != '') and (params.endPaymentTime != null and params.endPaymentTime!='')">
and pb.payment_time between #{params.beginPaymentTime} and #{params.endPaymentTime}
</when>
<when test="(params.beginPaymentTime != null and params.beginPaymentTime != '')">
and pb.payment_time <![CDATA[ >= ]]> #{params.beginPaymentTime}
</when>
<when test="(params.endPaymentTime != null and params.endPaymentTime!='')">
and pb.payment_time <![CDATA[ <= ]]> #{params.endPaymentTime}
</when>
</choose>
</if>
<if test="(params.beginActualPaymentTime != null and params.beginActualPaymentTime != '') or (params.endActualPaymentTime != null and params.endActualPaymentTime!='')">
<choose>
<when test="(params.beginActualPaymentTime != null and params.beginActualPaymentTime != '') and (params.endActualPaymentTime != null and params.endActualPaymentTime!='')">
and pb.actual_payment_time between #{params.beginActualPaymentTime } and #{params.endActualPaymentTime}
</when>
<when test="(params.beginActualPaymentTime != null and params.beginActualPaymentTime != '')">
and pb.actual_payment_time <![CDATA[ >= ]]> #{params.beginActualPaymentTime }
</when>
<when test="(params.endActualPaymentTime != null and params.endActualPaymentTime!='')">
and pb.actual_payment_time <![CDATA[ <= ]]> #{params.endActualPaymentTime}
</when>
</choose>
</if>
<if test="actualPaymentTime != null ">and date_format(pb.actual_payment_time,'%Y-%m-%d') = <if test="actualPaymentTime != null ">and date_format(pb.actual_payment_time,'%Y-%m-%d') =
date_format(#{actualPaymentTime},'%Y-%m-%d') date_format(#{actualPaymentTime},'%Y-%m-%d')
</if> </if>
<if test="paymentMethod != null and paymentMethod != ''">and pb.payment_method = #{paymentMethod}</if> <if test="paymentMethod != null and paymentMethod != ''">and pb.payment_method = #{paymentMethod}</if>
<if test="approveNode != null and approveNode != ''">and pb.payment_bill_code in <if test="payableBillCode != null and payableBillCode != ''">and apb.payable_bill_code like concat('%',
( #{payableBillCode}, '%')
select business_key from bu_todo where approve_user_name like concat('%', #{approveNode}, '%') and process_key in (
'finance_payment','finance_refund')
)
</if>
<if test="payableBillCode != null and payableBillCode != ''">and pb.payment_bill_code in (
select payment_bill_code from oms_payable_payment_detail t1 left join oms_payable_bill t2 on
t1.payable_bill_id=t2.id
where t2.payable_bill_code=#{payableBillCode}
)
</if> </if>
<if test="preResidueAmount != null and preResidueAmount != ''"> <if test="preResidueAmount != null and preResidueAmount != ''">
<choose> <choose>

View File

@ -27,11 +27,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
t1.purchase_no,t1.product_type,t1.order_code,t1.total_amount,t1.tax_rate,t1.tax_total, t1.purchase_no,t1.product_type,t1.order_code,t1.total_amount,t1.tax_rate,t1.tax_total,
t2.warehouse_name, t3.user_name as create_by_name,t2.warehouse_type, t2.warehouse_name, t3.user_name as create_by_name,t2.warehouse_type,
t4.vendor_name,t5.model t4.vendor_name,t5.model
,t6.original_filename
from oms_inventory_inner t1 from oms_inventory_inner t1
left join oms_warehouse_info t2 on t1.warehouse_id = t2.id left join oms_warehouse_info t2 on t1.warehouse_id = t2.id
left join oms_vendor_info t4 on t1.vendor_code = t4.vendor_code left join oms_vendor_info t4 on t1.vendor_code = t4.vendor_code
left join sys_user t3 on t1.create_by = t3.user_id left join sys_user t3 on t1.create_by = t3.user_id
left join product_info t5 on t1.product_code = t5.product_code left join product_info t5 on t1.product_code = t5.product_code
left join oms_file_log t6 on t1.file_id=t6.id
</sql> </sql>
<sql id="selectBaseInnerVo"> <sql id="selectBaseInnerVo">
select t1.id, t1.inner_code, t1.product_code, t1.quantity, t1.warehouse_id, t1.create_by, t1.update_by, t1.create_time, t1.update_time ,t1.vendor_code select t1.id, t1.inner_code, t1.product_code, t1.quantity, t1.warehouse_id, t1.create_by, t1.update_by, t1.create_time, t1.update_time ,t1.vendor_code

View File

@ -337,8 +337,5 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{item} #{item}
</foreach> </foreach>
</delete> </delete>
<delete id="deleteByTicketBillCode">
delete from oms_payable_ticket_detail where ticket_bill_code = #{code}
</delete>
</mapper> </mapper>

View File

@ -43,24 +43,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<where> <where>
<if test="ticketBillCode != null and ticketBillCode != ''"> <if test="ticketBillCode != null and ticketBillCode != ''">
and ticket_bill_code = #{ticketBillCode} and ticket_bill_code = #{ticketBillCode}
</if>
<if test="projectCode != null and projectCode != ''">
and t1.ticket_bill_code in (
select t1.ticket_bill_code from oms_payable_ticket_detail t1
inner join oms_payable_bill t2 on t1.payable_bill_id=t2.id
inner join project_order_info t3 on t2.order_code=t3.order_code
inner join project_info t4 on t3.project_id=t4.id
where t4.project_code = #{projectCode}
)
</if>
<if test="projectName != null and projectName != ''">
and t1.ticket_bill_code in (
select t1.ticket_bill_code from oms_payable_ticket_detail t1
inner join oms_payable_bill t2 on t1.payable_bill_id=t2.id
inner join project_order_info t3 on t2.order_code=t3.order_code
inner join project_info t4 on t3.project_id=t4.id
where t4.project_name = #{projectName}
)
</if> </if>
<if test="ticketBillCodeList != null and ticketBillCodeList.size>0"> <if test="ticketBillCodeList != null and ticketBillCodeList.size>0">
and ticket_bill_code in <foreach item="item" collection="ticketBillCodeList" separator="," open="(" close=")" index=""> and ticket_bill_code in <foreach item="item" collection="ticketBillCodeList" separator="," open="(" close=")" index="">
@ -422,15 +404,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where id = #{item.id} where id = #{item.id}
</foreach> </foreach>
</update> </update>
<update id="revokeTicket">
update oms_ticket_bill
set approve_status =#{approveStatus},
ticket_price_with_tax=null,
ticket_price_without_tax=null,
total_price_with_tax=null
where id = #{id}
</update>
<delete id="deleteOmsTicketBillById" parameterType="Long"> <delete id="deleteOmsTicketBillById" parameterType="Long">
delete from oms_ticket_bill where id = #{id} delete from oms_ticket_bill where id = #{id}