148 lines
5.6 KiB
PHP
148 lines
5.6 KiB
PHP
<?php
|
|
|
|
namespace app\adminapi\controller\works\finance;
|
|
|
|
use app\adminapi\controller\BaseAdminController;
|
|
use app\common\model\auth\Admin;
|
|
use app\common\model\dept\Dept;
|
|
use think\facade\Db;
|
|
|
|
class IncomeController extends BaseAdminController
|
|
{
|
|
public function index(){
|
|
$params = $this->request->get(['start_time','end_time','status','page_no','page_size']);
|
|
$page_no = !empty($params['page_no']) ? $params['page_no'] : 1;
|
|
$page_size = !empty($params['page_size']) ? $params['page_size'] : 15;
|
|
$where = [];
|
|
if(!empty($params['start_time']) && !empty($params['end_time'])){
|
|
if(strtotime($params['end_time']) <= strtotime($params['start_time'])){
|
|
return $this->fail('结束时间不等小于开始时间');
|
|
}
|
|
$where[] = ['create_time','between',[strtotime($params['start_time']),strtotime($params['end_time'])]];
|
|
}
|
|
if(!empty($params['status'])){
|
|
$where[] = match ($params['status']){
|
|
'1'=> ['is_cash','=',0], //未到账
|
|
'2'=> ['is_cash','=',1], //部分到账
|
|
'3'=> [['is_cash','=',2]], //全部到账
|
|
};
|
|
}else{
|
|
$where[] = ['is_cash','in','0,1,2'];
|
|
}
|
|
$lists = Db::name('oa_invoice')->field('id,is_cash,enter_amount,enter_time,type,invoice_title,amount,invoice_type,admin_id,create_time,code,open_time,check_admin_ids,open_admin_id')->where('check_status',5)->where($where)
|
|
->page($page_no, $page_size)->order('id desc')->select()->each(function($data){
|
|
$admin = Admin::field('name,dept_id')->where('id',$data['admin_id'])->findOrEmpty();
|
|
$dept = Dept::where('id',$admin['dept_id'])->value('name');
|
|
$check_admin_users = Admin::where('id','in',$data['check_admin_ids'])->column('name');
|
|
$data['user_name'] = $admin['name'];
|
|
$data['dept_name'] = $dept ?? '';
|
|
$data['check_admin_users'] = !empty($check_admin_users) ? implode(',',$check_admin_users) : '';
|
|
$data['create_time'] = date('Y-m-d H:i:s',$data['create_time']);
|
|
$data['type_text'] = match ($data['type']){
|
|
1=>'企业',2=>'个人'
|
|
};
|
|
$data['invoice_type_text'] = match ($data['invoice_type']){
|
|
1=>'增值税专用发票',2=>'普通发票',3=>'专用发票'
|
|
};
|
|
$data['is_cash_text'] = match ($data['is_cash']){
|
|
0=>'未到账',1=>'部分到账',2=>'全部到账'
|
|
};
|
|
$data['open_time'] = !empty($data['open_time']) ? date('Y-m-d',$data['open_time']) : '';
|
|
$data['enter_time'] = !empty($data['enter_time']) ? date('Y-m-d H:i:s',$data['enter_time']) : '';
|
|
$data['open_admin_name'] = Admin::where('id',$data['open_admin_id'])?->value('name');
|
|
return $data;
|
|
})->toArray();
|
|
$count = Db::name('oa_invoice')->where($where)->where('check_status',5)->count();
|
|
return $this->success('成功', compact('count', 'lists', 'page_no', 'page_size'));
|
|
}
|
|
|
|
public function add(){
|
|
$params = $this->request->post(['invoice_id','detail']);
|
|
if(empty($params['invoice_id']) || empty($params['detail'])){
|
|
return $this->fail('参数错误');
|
|
}
|
|
$invoice = Db::name('oa_invoice')->where('id',$params['invoice_id'])->find();
|
|
if(empty($invoice)){
|
|
return $this->fail('开票信息不存在');
|
|
}
|
|
if(!is_array($params['detail'])){
|
|
return $this->fail('到账记录数据格式错误');
|
|
}
|
|
$income_amount = 0;
|
|
$save_data = [];
|
|
foreach($params['detail'] as $k=>$v){
|
|
if(empty($v['enter_time']) || !strtotime($v['enter_time'])){
|
|
return $this->fail('到账记录第'.($k+1).'行到账日期为空');
|
|
}
|
|
if(empty($v['amount'])){
|
|
return $this->fail('到账记录第'.($k+1).'行到帐金额为空');
|
|
}
|
|
$income_amount += $v['amount'];
|
|
$save_data[] = [
|
|
'inid' => $params['invoice_id'],
|
|
'amount' => $v['amount'],
|
|
'admin_id' => $this->adminId,
|
|
'enter_time' => strtotime($v['enter_time']),
|
|
'remarks' => $v['remarks'] ?? '',
|
|
'create_time' => time(),
|
|
'status' => 1
|
|
];
|
|
}
|
|
if($income_amount > $invoice['amount']){
|
|
return $this->fail('到账金额大于发票金额,不允许保存');
|
|
}
|
|
Db::startTrans();
|
|
try {
|
|
Db::name('oa_invoice_income')->where('inid',$params['invoice_id'])->delete();
|
|
Db::name('oa_invoice_income')->insertAll($save_data);
|
|
Db::name('oa_invoice')->where('id',$params['invoice_id'])->update([
|
|
'enter_amount' => $income_amount,
|
|
'enter_time' => time(),
|
|
'is_cash' => $income_amount < $invoice['amount'] ? 1 : 2
|
|
]);
|
|
Db::commit();
|
|
return $this->success('ok');
|
|
} catch (\Exception $e) {
|
|
Db::rollback();
|
|
return $this->fail();
|
|
}
|
|
}
|
|
|
|
public function lists(){
|
|
$params = $this->request->get(['invoice_id']);
|
|
if(empty($params['invoice_id'])){
|
|
return $this->fail('参数错误');
|
|
}
|
|
$data = Db::name('oa_invoice_income')->where('inid',$params['invoice_id'])->order('create_time desc')->select()->each(function($data){
|
|
$data['enter_time'] = date('Y-m-d',$data['enter_time']);
|
|
$data['admin_name'] = Admin::where('id',$data['admin_id'])?->value('name');
|
|
return $data;
|
|
})->toArray();
|
|
return $this->data($data);
|
|
}
|
|
|
|
public function fdz(){
|
|
$params = $this->request->post(['invoice_id']);
|
|
if(empty($params['invoice_id'])){
|
|
return $this->fail('参数错误');
|
|
}
|
|
$invoice = Db::name('oa_invoice')->where('id',$params['invoice_id'])->find();
|
|
if(empty($invoice)){
|
|
return $this->fail('开票信息不存在');
|
|
}
|
|
Db::startTrans();
|
|
try {
|
|
Db::name('oa_invoice_income')->where('inid',$params['invoice_id'])->delete();
|
|
Db::name('oa_invoice')->where('id',$params['invoice_id'])->update([
|
|
'enter_amount' => 0,
|
|
'enter_time' => 0,
|
|
'is_cash' => 0
|
|
]);
|
|
Db::commit();
|
|
return $this->success('ok');
|
|
} catch (\Exception $e) {
|
|
Db::rollback();
|
|
return $this->fail();
|
|
}
|
|
}
|
|
} |