完善发票管理

This commit is contained in:
hdm 2021-11-24 23:15:55 +08:00
parent baaee849a8
commit 783ef2c10d
6 changed files with 188 additions and 74 deletions

View File

@ -68,7 +68,7 @@ class Invoice extends BaseController
{
$rows = empty($param['limit']) ? get_config('app . page_size') : $param['limit'];
$expense = InvoiceList::where($where)
->order('create_time asc')
->order('id desc')
->paginate($rows, false, ['query' => $param])
->each(function ($item, $key) {
$item->user = Db::name('Admin')->where(['id' => $item->admin_id])->value('name');
@ -87,14 +87,17 @@ class Invoice extends BaseController
if ($invoice) {
$invoice['user'] = Db::name('Admin')->where(['id' => $invoice['admin_id']])->value('name');
$invoice['department'] = Db::name('Department')->where(['id' => $invoice['did']])->value('title');
if ($invoice['check_admin_id'] > 0) {
$invoice['check_admin'] = Db::name('Admin')->where(['id' => $invoice['check_admin_id']])->value('name');
$invoice['check_admin'] = Db::name('Admin')->where(['id' => $invoice['check_admin_id']])->value('name');
$invoice['open_admin'] = Db::name('Admin')->where(['id' => $invoice['open_admin_id']])->value('name');
if ($invoice['check_time'] > 0) {
$invoice['check_time'] = empty($invoice['check_time']) ? '0' : date('Y-m-d H:i', $invoice['check_time']);
}
if ($invoice['open_admin_id'] > 0) {
$invoice['open_name'] = Db::name('Admin')->where(['id' => $invoice['open_admin_id']])->value('name');
if ($invoice['open_time'] > 0) {
$invoice['open_time'] = empty($invoice['open_time']) ? '0' : date('Y-m-d H:i', $invoice['open_time']);
}
else{
$invoice['open_time'] = '-';
}
}
return $invoice;
}
@ -109,7 +112,11 @@ class Invoice extends BaseController
$start_time = isset($param['start_time']) ? strtotime(urldecode($param['start_time'])) : 0;
$end_time = isset($param['end_time']) ? strtotime(urldecode($param['end_time'])) : 0;
if ($start_time > 0 && $end_time > 0) {
$where[] = ['expense_time', 'between', [$start_time, $end_time]];
$where[] = ['create_time', 'between', [$start_time, $end_time]];
}
if (isset($param['invoice_status']) && $param['invoice_status']!='') {
$where[] = ['invoice_status', '=', $param['invoice_status']];
}
$invoice = $this->get_list($param, $where);
return table_assign(0, '', $invoice);
@ -123,8 +130,8 @@ class Invoice extends BaseController
{
$param = get_params();
if (request()->isAjax()) {
//人类型判断
if ($param['type'] == 2) {
$param['invoice_status'] = 1;
if ($param['type'] == 1) {
if (!$param['invoice_tax']) {
return to_assign(1, '纳税人识别号不能为空');
}

View File

@ -34,16 +34,22 @@
title: '到账状态',
align: 'center',
width: 100,
{
field: 'is_cash',
title: '审核状态',
align: 'center',
width: 100,
templet:function(d){
var html='<span style="color:#FF5722">未到账</span>';
if(d.invoice_status==4){
html='<span style="color:#009688">部分到账</span>';
if(d.is_cash==1){
html='<span style="color:#5FB878">部分到账</span>';
}
else if(d.invoice_status==5){
else if(d.is_cash==2){
html='<span style="color:#009688">全部到账</span>';
}
return html;
}
},
},{
field: 'enter_amount',
title: '到账金额(元)',
@ -66,10 +72,10 @@
templet:function(d){
var html='-';
if(d.invoice_type==1){
html='<span style="color:#1E9FFF"></span>';
html='<span style="color:#1E9FFF"></span>';
}
else if(d.invoice_type==2){
html='<span style="color:#5FB878"></span>';
html='<span style="color:#5FB878"></span>';
}
return html;
}

View File

@ -20,7 +20,7 @@
</td>
<td class="layui-td-gray">开票类型<span style="color: red">*</span></td>
<td>
<select name="invoice_type" lay-verify="required" lay-reqText="请选择开票类型">
<select name="invoice_type" lay-verify="required" lay-reqText="请选择开票类型">
<option value="">请选择开票类型</option>
<option value="1">增值税专用发票</option>
<option value="2">增值税普通发票</option>
@ -28,7 +28,7 @@
</td>
<td class="layui-td-gray">开票主体<span style="color: red">*</span></td>
<td>
<select name="invoice_subject" lay-verify="required" lay-reqText="请选择开票主体">
<select name="invoice_subject" lay-verify="required" lay-reqText="请选择开票主体">
<option value="">请选择开票主体</option>
{volist name=":get_invoice_subject()" id="vo"}
<option value="{$vo.id}">{$vo.title}</option>
@ -53,7 +53,7 @@
<td class="layui-td-gray">开户行<span style="color: red">*</span></td>
<td><input type="text" name="invoice_bank" class="layui-input" value=""></td>
<td class="layui-td-gray">银行账号<span style="color: red">*</span></td>
<td><input type="text" name="invoice_account" class="layui-input" value="" lay-verify="number"></td>
<td><input type="text" name="invoice_account" class="layui-input" value=""></td>
</tr>
<tr class="invoice-type">
<td class="layui-td-gray2">银行营业网点<span style="color: red">*</span></td>
@ -69,7 +69,7 @@
<td class="layui-td-gray">发票审核人<span style="color: red">*</span></td>
<td colspan="5">
<div style="width:300px;">
<select name="check_admin_id" lay-verify="required" lay-reqText="请选择发票审核人">
<select name="check_admin_id" lay-verify="required" lay-reqText="请选择发票审核人">
<option value="">请选择发票审核人</option>
{volist name=":get_check_user(3)" id="vo"}
<option value="{$vo.uid}">{$vo.user}</option>
@ -96,7 +96,7 @@
</td>
<td class="layui-td-gray">开票主体<span style="color: red">*</span></td>
<td>
<select name="invoice_subject" lay-verify="required" lay-reqText="请选择开票主体">
<select name="invoice_subject" lay-verify="required" lay-reqText="请选择开票主体">
<option value="">请选择开票主体</option>
{volist name=":get_invoice_subject()" id="vo"}
<option value="{$vo.id}" {eq name="$vo.id" value="$detail.invoice_subject"}selected{/eq}>{$vo.title}</option>
@ -137,7 +137,7 @@
<td class="layui-td-gray">发票审核人<span style="color: red">*</span></td>
<td colspan="5">
<div style="width:300px;">
<select name="check_admin_id" lay-verify="required" lay-reqText="请选择发票审核人">
<select name="check_admin_id" lay-verify="required" lay-reqText="请选择发票审核人">
<option value="">请选择发票审核人</option>
{volist name=":get_check_user(3)" id="vo"}
<option value="{$vo.uid}" {eq name="$vo.uid" value="$detail.check_admin_id"}selected{/eq}>{$vo.user}</option>
@ -151,7 +151,7 @@
<div class="layui-form-item" style="padding-top:10px;">
<input name="id" id="id" type="hidden" value="{$id}">
<button class="layui-btn" lay-submit="" lay-filter="webform">立即提交</button>
<button class="layui-btn" lay-submit="" lay-filter="webform">保存并提交审核</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</form>

View File

@ -2,6 +2,28 @@
<!-- 主体 -->
{block name="body"}
<div class="body-content">
<form class="layui-form">
<div id="barDate" class="layui-input-inline">
<div class="layui-input-inline" style="width:110px;">
<input type="text" class="layui-input" id="start_time" placeholder="选择时间区间" readonly name="start_time">
</div>
~
<div class="layui-input-inline" style="width:110px;">
<input type="text" class="layui-input" id="end_time" placeholder="选择时间区间" readonly name="end_time">
</div>
</div>
<div class="layui-input-inline">
<select name="invoice_status">
<option value="">请选择状态</option>
<option value="0">审核不通过</option>
<option value="1">审核中</option>
<option value="2">审核通过,待开具</option>
<option value="3">已开具</option>
<option value="10">已作废</option>
</select>
</div>
<button class="layui-btn layui-btn-danger" lay-submit="" lay-filter="webform">提交搜索</button>
</form>
<table class="layui-hide" id="test" lay-filter="test"></table>
</div>
<script type="text/html" id="toolbarDemo">
@ -18,7 +40,20 @@
function init(layui) {
var table = layui.table,
rightpage = layui.rightpage,
form = layui.form;
form = layui.form,
laydate = layui.laydate;
//日期范围
laydate.render({
elem: '#barDate',
range: ['#start_time', '#end_time']
});
//监听搜索提交
form.on('submit(webform)', function(data){
let f=data.field;
tableIns.reload({where:{invoice_status:f.invoice_status,start_time:f.start_time,end_time:f.end_time},page:{curr:1}});
return false;
});
var tableIns = table.render({
elem: '#test',
@ -37,12 +72,23 @@
}, {
field: 'invoice_title',
title: '开票抬头',
width: 240,
width: 260,
templet:function(d){
var html='';
if(d.type==1){
html='<span class="layui-badge layui-bg-blue">企业</span> '+d.invoice_title;
}
else if(d.type==2){
html='<span class="layui-badge layui-bg-green">个人</span> '+d.invoice_title;
}
return html;
}
},{
field: 'amount',
title: '开票金额(元)',
align: 'right',
width: 120,
style: 'color:#1E9FFF',
width: 100,
},{
field: 'invoice_type',
title: '开票类型',
@ -51,10 +97,10 @@
templet:function(d){
var html='-';
if(d.invoice_type==1){
html='<span style="color:#1E9FFF"></span>';
html='<span style="color:#1E9FFF"></span>';
}
else if(d.invoice_type==2){
html='<span style="color:#5FB878"></span>';
html='<span style="color:#5FB878"></span>';
}
return html;
}
@ -74,23 +120,23 @@
align: 'center',
width: 150
},{
field: 'status',
title: '审核状态',
field: 'invoice_status',
title: '发票状态',
align: 'center',
width: 120,
width: 100,
templet:function(d){
var html='<span style="color:#FF5722">审核不通过</span>';
if(d.invoice_status==1){
html='<span style="color:#393D49">审核中</span>';
html='<span style="color:#FFB800">审核中</span>';
}
else if(d.invoice_status==2){
html='<span style="color:#5FB878">待开具</span>';
}
else if(d.invoice_status==3){
html='<span style="color:#009688">已开具</span>';
html='<span style="color:#1E9FFF">已开具</span>';
}
else if(d.invoice_status==4){
html='<span style="color:#009688">部分到账</span>';
html='<span style="color:#5FB878">部分到账</span>';
}
else if(d.invoice_status==5){
html='<span style="color:#009688">全部到账</span>';
@ -111,20 +157,20 @@
align: 'center',
width: 136
},{
field: 'pay_name',
field: 'open_name',
title: '开票人',
align: 'center',
width: 90
},{
field: 'pay_time',
field: 'open_time',
title: '开票时间',
align: 'center',
width: 136
},{
field: 'pay_time',
field: 'code',
title: '发票号码',
align: 'center',
width: 136
width: 120
}, {
field: 'right',
fixed: 'right',
@ -136,11 +182,13 @@
var btn1='<span class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">详情</span>';
var btn2='<span class="layui-btn layui-btn-xs" lay-event="edit">编辑</span>';
var btn3='<span class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</span>';
if(d.admin_id==login_user){
html+=btn1+btn2+btn3;
var btn4='<span class="layui-btn layui-btn-warm layui-btn-xs" lay-event="disabled">作废</span>';
html+=btn1;
if(d.invoice_status==0 && d.admin_id==login_user){
html+=btn2+btn3;
}
else{
html+=btn1+btn3;
if(d.invoice_status==3 && d.open_admin_id==login_user){
html+=btn4;
}
html+='</div>';
return html;
@ -188,6 +236,27 @@
layer.close(index);
});
}
if (obj.event === 'disabled') {
layer.confirm('确定作废该发票吗?', {
icon: 3,
title: '提示'
}, function(index) {
$.ajax({
url: "{:url('home/invoice/check')}",
data: {
id: data.id,
invoice_status:10
},
success: function(res) {
layer.msg(res.msg);
if (res.code == 0) {
location.reload();
}
}
})
layer.close(index);
});
}
});
}
</script>

View File

@ -18,7 +18,7 @@
<td class="layui-td-gray">开票类型</td>
<td>
{eq name="$detail.invoice_type" value="1"}增值税专用发票{/eq}
{eq name="$detail.invoice_type" value="2"}增值税普通发票{/eq}>
{eq name="$detail.invoice_type" value="2"}增值税普通发票{/eq}
</td>
<td class="layui-td-gray">开票主体</td>
<td>
@ -62,44 +62,65 @@
<td class="layui-td-gray">发票状态</td>
<td colspan="5">
{if condition="($detail.invoice_status == 0)"}
<span style="color:#FF5722">审核不通过</span>
<span style="color:#FF5722">审核不通过 【原因:{$detail.check_remark}】</span>
{elseif condition="($detail.invoice_status == 1)"}
<span style="color:#009688">审核中</span>
{elseif condition="($detail.invoice_status == 2)"}
<span style="color:#1E9FFF">审核通过</span>
<span style="color:#1E9FFF">审核通过,待开具</span>
{elseif condition="($detail.invoice_status == 3)"}
<span style="color:#009688">待开具</span>
{elseif condition="($detail.invoice_status == 4)"}
<span style="color:#1E9FFF">已开具</span>
{elseif condition="($detail.invoice_status == 5)"}
<span style="color:#009688">部分到账</span>
{elseif condition="($detail.invoice_status == 5)"}
<span style="color:#1E9FFF">全部到账</span>
{elseif condition="($detail.invoice_status == 10)"}
<span style="color:#FF5722">已作废</span>
{/if}
</td>
</tr>
{if condition="$detail.check_time > 0"}
<tr>
{if condition="($detail.check_time == 0)"}
<td class="layui-td-gray">当前审核人</td>
<td colspan="5">{$detail.check_admin}</td>
{else/}
<td class="layui-td-gray">发票审核人</td>
<td class="layui-td-gray2">审核人</td>
<td>{$detail.check_admin}</td>
<td class="layui-td-gray">审核时间</td>
<td colspan="3">{$detail.check_admin}</td>
{/if}
<td class="layui-td-gray2">审核时间</td>
<td colspan="3">{$detail.check_time}</td>
</tr>
{else/}
<tr>
<td class="layui-td-gray2">审核人</td>
<td colspan="5">{$detail.check_admin}</td>
</tr>
{/if}
{if condition="$detail.open_admin_id > 0"}
<tr>
<td class="layui-td-gray2">开票人</td>
<td>{$detail.open_admin}</td>
<td class="layui-td-gray2">开票时间</td>
<td>{$detail.open_time}</td>
<td class="layui-td-gray2">发票号码</td>
<td>{$detail.code}</td>
</tr>
{/if}
{if condition="($detail.invoice_status == 1) AND ($uid == $detail.check_admin_id)"}
<tr>
<td class="layui-td-gray">选择开票人<span style="color: red">*</span></td>
<td>
<form class="layui-form">
<select name="open_admin_id">
<option value="">请选择发票开具人</option>
{volist name=":get_check_user(4)" id="vo"}
<option value="{$vo.uid}">{$vo.user}</option>
{/volist}
</select>
</form>
</td>
<td colspan="4">
<button class="layui-btn layui-btn-danger" lay-event="checkno">审核不通过</button>
<button class="layui-btn" lay-event="checkok">审核通过</button>
</td>
</tr>
{/if}
</table>
<div class="layui-form-item" style="padding-top:10px;">
<input name="id" id="id" type="hidden" value="{$detail.id}">
{if condition="($detail.invoice_status == 0) AND ($uid == $detail.admin_id)"}
<a class="layui-btn" href="/home/invoice_status/add?id={$detail.id}">编辑</a>
{/if}
{if condition="($detail.invoice_status == 1) AND ($uid == $detail.check_admin_id)"}
<button class="layui-btn layui-btn-danger" lay-event="checkno">审核不通过</button>
<button class="layui-btn" lay-event="checkok">审核通过</button>
<a class="layui-btn" href="/home/invoice/add?id={$detail.id}">编辑</a>
{/if}
{if condition="($detail.invoice_status == 2) AND ($uid == $detail.open_admin_id)"}
<button class="layui-btn" lay-event="payed">开票确认</button>
@ -115,10 +136,15 @@
function init(layui) {
$('.body-content').on('click', '[lay-event="checkok"]', function () {
var id=$('#id').val();
var open_admin=$('[name="open_admin_id"]').val();
if(open_admin == ''){
layer.msg('请选择发票开具人');
return false;
}
layer.confirm('确定审核通过该发票申请?', {icon: 3, title:'提示'}, function(index){
$.ajax({
url:"{:url('home/invoice/check')}",
data:{id:id,invoice_status:2},
data:{id:id,invoice_status:2,open_admin_id:open_admin},
success:function(res){
layer.msg(res.msg);
if(res.code==0){
@ -160,17 +186,23 @@ function init(layui) {
$('.body-content').on('click', '[lay-event="payed"]', function () {
var id=$('#id').val();
layer.confirm('确定已经开具发票?', {icon: 3, title:'提示'}, function(index){
$.ajax({
url:"{:url('home/invoice/check')}",
data:{id:id,invoice_status:3},
success:function(res){
layer.msg(res.msg);
if(res.code==0){
window.setTimeout(function(){
parent.location.reload();
},1200)
}
layer.prompt({title: '输入发票号码', formType: 3,value :''}, function(text, index){
if(text ==''){
layer.msg('请输入发票号码');
return false;
}
$.ajax({
url:"{:url('home/invoice/check')}",
data:{id:id,invoice_status:3,code:text},
success:function(res){
layer.msg(res.msg);
if(res.code==0){
window.setTimeout(function(){
parent.location.reload();
},1200)
}
}
})
})
})
})

View File

@ -614,7 +614,7 @@ CREATE TABLE `oa_invoice` (
`crid` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '预定字段:关联合同协议号ID',
`ptid` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '预定字段:关联项目ID',
`cash_type` tinyint(1) UNSIGNED NULL DEFAULT 1 COMMENT '付款方式1现金 2转账 3微信支付 4支付宝 5信用卡 6支票 7其他',
`is_cash` tinyint(1) UNSIGNED NULL DEFAULT 0 COMMENT '是否直接到账0否 1是',
`is_cash` tinyint(1) UNSIGNED NULL DEFAULT 0 COMMENT '是否到账0未到账 1部分到账 2全部到账',
`amount` decimal(15, 2) NULL DEFAULT 0.00 COMMENT '发票金额',
`enter_amount` decimal(15, 2) NULL DEFAULT 0.00 COMMENT '到账金额',
`did` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '开发票部门',
@ -633,7 +633,7 @@ CREATE TABLE `oa_invoice` (
`invoice_account` varchar(100) NOT NULL DEFAULT '' COMMENT '银行账号',
`invoice_banking` varchar(100) NOT NULL DEFAULT '' COMMENT '银行营业网点',
`invoice_address` varchar(100) NOT NULL DEFAULT '' COMMENT '地址',
`invoice_status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '发票状态:0审核不通过 1审核中 2待开具 3已开具 4部分到账 5全部到账 10已作废',
`invoice_status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '发票状态:0审核不通过 1审核中 2审核通过,待开具 3 已开具 10已作废',
`check_remark` text NULL COMMENT '审核不通过的理由',
`remark` text NULL COMMENT '备注',
`status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态:-1删除 0禁用 1正常',